Parse.com Показать все объекты из каждого отношения в запросе

Я хочу показать все объекты из каждого отношения в следующем запросе. Но это все еще пусто. Я пытался с этим кодом, но он не работал. Я надеюсь, что кто-то может помочь мне. заранее спасибо

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!");
                                }
                            }
                        });
                    }

                }

            }
        });

Извините за мой плохой английский:)

1 ответ

Решение

Я предлагаю вам использовать указатели, а не отношения (в вашем случае), и я объясню, почему:

Не рекомендуется запускать findInBackground в цикле, потому что если размер вашего набора данных (mData) будет большим, вы будете выполнять вызовы mData.size к серверу, и это не лучший способ, а также не масштабируемый. Я предлагаю вам использовать Pointer Arrays (вы можете узнать больше об этом здесь), используя массивы, вам понадобится всего один сервисный вызов для передачи всех данных вашему клиенту (таким образом, ваше решение будет более масштабируемым и намного более простым)

Таким образом, ваше новое решение (если вы решите пойти с ним, конечно,:)) будет следующим:

  • Групповая коллекция
  • Сбор информации
  • Один ко многим из группы в коллекцию (просто прочитайте в документации, как это можно сделать)

И тогда ваш код будет выглядеть следующим образом:

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% точен, но я надеюсь, что вы поняли идею.

Удачи:)

Другие вопросы по тегам