【问题标题】:Parse.com Show all object from every Relation in QueryParse.com 显示查询中每个关系的所有对象
【发布时间】:2016-12-16 00:32:32
【问题描述】:

我想在以下查询中显示每个关系中的所有对象。但它仍然是空的。我尝试使用此代码,但它不起作用。我希望有一个人可以帮助我。提前致谢

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

                }

            }
        });

对不起我的英语不好:)

【问题讨论】:

  • 您希望每个关系下有多少个对象?
  • @Ran Hassid 有时是 1000 或 2000。这是不同的
  • 我会针对您的问题发布一个带有建议的答案

标签: android listview android-recyclerview parse-platform parse-android-sdk


【解决方案1】:

我建议您使用指针而不是关系(在您的情况下),我将解释原因:

在循环中运行 findInBackground 不是最佳做法,因为如果您的数据集 (mData) 很大,您将对服务器执行 mData.size 调用,这不是最佳做法,也无法扩展。我建议你使用指针数组(你可以阅读更多关于它的信息here) 通过使用数组,您只需要 一个 服务调用即可将所有数据发送到您的客户端(这样您的解决方案将更具可扩展性并且更简单)

因此,您的新解决方案(当然,如果您决定采用它 :))将如下:

  • 群组合集
  • 数据收集
  • 从组到集合的一对多(只需在文档中阅读如何完成)

然后您的代码将如下所示:

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% 准确,但我希望你明白。

祝你好运:)

【讨论】:

  • 您好,谢谢您的回答。我有一个问题,希望你能帮助我。当我输入List&lt;ParseObject&gt; dataItems = obj.get("data"); 时,我得到 Incompatible Types Required Java.util.List Found Java.lang.Object
  • 对不起,你应该使用 getList 而不是 get(我会更新我的答案),但请确保你的名字是正确的..
  • 我得到 **java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on an null object reference **
  • 那是因为您可能试图访问错误的名称.. 只需查看您的模型(您也可以在 mongo 内部查看它是如何保存的.. )
  • 您能否检查所有结果中是否为空(可能通过调试器或代码)?
猜你喜欢
  • 1970-01-01
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多