0

Я хочу показать весь объект из каждой связи в следующем запросе. Но он все еще пуст. Я пробовал с этим Кодексом, но это не сработало. Я надеюсь, что кто-то может мне помочь. Заранее спасибоParse.com Показать все объекты от каждого Relation in Query

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

       } 

      } 
     }); 

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

+0

Сколько объектов вы ожидаете иметь под каждым отношением? –

+0

@ Ran Hassid Когда-то 1000 или 2000. По-другому – Loyal

+0

Я отправлю ответ с предложением на ваш вопрос –

ответ

1

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

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

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

  • Group
  • сбор данных
  • Один ко многим из группы в коллекция (только что прочитанная в d OCS, как это можно сделать)

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

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

Удачи :)

+0

Эй, спасибо за ваш ответ. У меня есть одна проблема, надеюсь, вы сможете мне помочь. Когда я помещаю 'List dataItems = obj.get (" data ");' i get ** Несовместимые типы Обязательный Java.util.List Найдено Java.lang.Object ** – Loyal

+0

Извините, вы должны использовать getList и не получить (я буду обновлять свой ответ), но, пожалуйста, убедитесь, что ваши имена верны. –

+0

Я получаю ** java.lang.NullPointerException: попытка вызвать метод интерфейса 'int java.util.List.size()' по ссылке на нулевой объект ** – Loyal

Смежные вопросы