1

私の Android アプリでは、 ParseObject をサブクラス化してFoodPrefクラス、およびParseUser を拡張する CustomUser クラスを作成し、「Food」と「Users」の間に関係「恋人」を作成しました。

CustomUser オブジェクト内に、createWithoutData メソッドを使用してキー「pref」に Pref オブジェクトを格納しました。CustomUser とそれぞれの Pref オブジェクトは 1 対 1 でマッピングされます。

ParseQueryAdapter を使用して、特定の食べ物のすべての愛好家をリストビューに表示したい場合は、

ParseQueryAdapter<ParseObject> adapter = new ParseQueryAdapter<ParseObject>(getActivity(),
    new ParseQueryAdapter.QueryFactory<ParseObject>() {
        public ParseQuery<ParseObject> create() {
               ParseQuery<ParseObject> query = food.getRelation("lovers").getQuery();
               query.selectKeys(Arrays.asList("pref");                                      
               return query;
        }
    });

adapter.setTextKey(Pref.COLUMN_PROFILE_NAME); adapter.setImageKey(Pref.COLUMN_PROFILE_PIC_THUMB);

参考までに、COLUMN_PROFILE_NAME = "profileName"、COLUMN_PROFILE_PIC_THUMB = "profileThumb"

問題は、「pref」が実際のオブジェクトへの参照にすぎないことです。そのため、listView がテキストと画像を取得しようとすると、「ParseObject にはこのキーのデータがありません。fetchIfNeeded() を呼び出してデータを取得してください」と表示されます。

私の目的は、クエリを ParseQueryAdapter に渡すことです。このクエリは、その特定の食品と「恋人」関係を持つ CustomUsers 内にネストされたすべての優先オブジェクトを取得します。

parse docs によると、「include」メソッドはリレーションでは機能しません。

助けてください、私はこれに長い間苦労してきました。

4

2 に答える 2

1

リレーションを取得するために、クエリを使用できるとは思いません。あなたの場合、あなたは使用します

ParseRelation<ParseObject> relation = user.getRelation("lovers");

このドキュメントを参照してください

お役に立てれば

于 2013-10-25T15:38:47.080 に答える
0

以下は、このクラスで利用可能な構成のレベルを示す例です。

// Instantiate a QueryFactory to define the ParseQuery to be used for fetching items in this
 // Adapter.
 ParseQueryAdapter.QueryFactory<ParseObject> factory =
     new ParseQueryAdapter.QueryFactory<ParseObject>() {
       public ParseQuery create() {
         ParseQuery query = new ParseQuery("Customer");
         //query.whereEqualTo("activated", true);
         //query.orderByDescending("moneySpent");
     query.include("your key");

         return query;
       }
     };

 // Pass the factory into the ParseQueryAdapter's constructor.
 ParseQueryAdapter<ParseObject> adapter = new ParseQueryAdapter<ParseObject>(this, factory);
 adapter.setTextKey("name");

 // Perhaps set a callback to be fired upon successful loading of a new set of ParseObjects.
 adapter.addOnQueryLoadListener(new OnQueryLoadListener<ParseObject>() {
   public void onLoading() {
     // Trigger any "loading" UI
   }

   public void onLoaded(List<ParseObject> objects, ParseException e) {
     // Execute any post-loading logic, hide "loading" UI
   }
 });

 // Attach it to your ListView, as in the example above
 ListView listView = (ListView) findViewById(R.id.listview);
 listView.setAdapter(adapter);
于 2014-06-05T20:44:16.300 に答える