Parse.com在查询中显示来自每个关系的所有对象

问题描述:

我想在随后的查询中显示来自每个关系的所有对象。但它仍然是空的。我尝试了这个代码,但它没有奏效。我希望有一个人可以帮助我。在此先感谢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!"); 
           } 
          } 
         }); 
        } 

       } 

      } 
     }); 

对不起我的英语不好:)

+0

您期望在每个关系下有多少个对象? –

+0

@Ran Hassid有时1000或2000.这是不同的 – Loyal

+0

我会发布一个答案和建议到您的问题 –

我建议你使用指针,而不是关系(你的情况),我将解释为什么:

它不是最好的做法在循环中运行findInBackground,因为如果你的数据集(mData)的大小很大,你会执行mData.size调用服务器,这不是一个最佳实践,也不可扩展。我建议你使用指针阵列(你可以阅读更多关于它here) 通过使用阵列,你将只需要一个服务调用来获取所有数据到你的客户端(这样你的解决方案将更具可扩展性和更简单)

所以新的解决方案(如果你决定去与它当然:))的将是如下:

  • 组收集
  • 数据收集
  • 之一,从集团到许多收藏(只读在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”);'我得到**不兼容的类型必需的Java.util.List 发现的Java.lang.Object ** – Loyal

+0

对不起,你应该使用getList并没有得到(我会更新我的答案),但请确保你的名字是正确的。 –

+0

我得到** java.lang.NullPointerException:试图调用接口方法'int java.util.List.size()'在空对象参考 ** – Loyal