0

次のクエリで、すべてのリレーションからすべてのオブジェクトを表示したいと考えています。しかし、それはまだ空です。このコードで試しましたが、うまくいきませんでした。誰かが私を助けてくれることを願っています。前もって感謝します

mData = new ArrayList<>();
        ParseQuery<ParseObject> receiver = ParseQuery.getQuery("Group");
        receiver.findInBackground(new FindCallback<ParseObject>() {
            public void done(List<ParseObject> feed, ParseException e) {
                if (e == null) {
                    mData = feed;
                    for (int i = 0; i < mData.size(); i++) {
                        ParseRelation<ParseObject> relation = mData.get(i).getRelation("Data");
                        ParseQuery<ParseObject> query = relation.getQuery();
                        query.findInBackground(new FindCallback<ParseObject>() {
                            @Override
                            public void done(List<ParseObject> objects, ParseException e) {
                                rData = objects;
                                Log.e("APP", String.valueOf(rData.size()));
                                Log.d("APP", "mData" + mData.size());

                                if (mSwipeStack.getAdapter() == null) {
                                    mAdapter = new SwipeAdapter(getContext(), rData);
                                    mSwipeStack.setAdapter(mAdapter);
                                    mAdapter.notifyDataSetChanged();

                                    Handler handler = new Handler();
                                    handler.postDelayed(new Runnable() {
                                        public void run() {
                                            Log.d("mAdapter", "Loaded");
                                        }
                                    }, 4000);
                                    //mSwipeStack.setListener(getActivity());
                                    Log.i("APP", "We found messages!");
                                }
                            }
                        });
                    }

                }

            }
        });

私の悪い英語でごめんなさい:)

4

1 に答える 1

1

(あなたの場合)リレーションではなくポインターを使用することをお勧めします。その理由を説明します。

データセット (mData) のサイズが大きくなるとサーバーに対して mData.size 呼び出しを実行することになるため、findInBackground をループで実行することはベスト プラクティスではありません。これはベスト プラクティスではなく、スケーラブルでもありません。ポインター配列を使用することをお勧めします (詳細については、こちらを参照してください)。配列を使用すると、すべてのデータをクライアントに取得するために必要なサービス呼び出しは1 つだけになります (この方法では、ソリューションがよりスケーラブルで、よりシンプルになります)。

したがって、新しいソリューション(もちろんそれを使用することにした場合:))は次のようになります。

  • グループコレクション
  • データ収集
  • グループからコレクションへの 1 対多 (その方法についてはドキュメントを参照してください)

そして、コードは次のようになります。

EDIT1 - getList を使用

ParseQuery<ParseObject> receiver = ParseQuery.getQuery("Group");
reciever.include("data");
receiver.findInBackground(new FindCallback<ParseObject>() {
            public void done(List<ParseObject> feed, ParseException e) {
               // in here you can access all the data which under group in the following way:

                 for (int i=0;i < feed.size();i++){
                    ParseObject obj = feed.get(i);
                    // here you have all the data collection 
                    List<ParseObject> dataItems = obj.getList("data");
                    // now you can loop on dataItems
                 }

            }
});

私のコードが 100% 正確ではない可能性があることに注意してください。

幸運を :)

于 2016-12-16T13:42:01.050 に答える