Parse.com 显示查询中每个关系的所有对象
Parse.com Show all object from every 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!");
}
}
});
}
}
}
});
抱歉我的英语不好:)
我建议你使用指针而不是关系(在你的情况下),我会解释原因:
在循环中 运行 findInBackground 不是最佳做法,因为如果您的数据集 (mData) 大小很大,您将对服务器执行 mData.size 调用,这不是最佳做法而且也不可扩展。我建议你使用指针数组(你可以阅读更多相关内容here)
通过使用数组,您只需要 一个 服务调用即可将所有数据发送给您的客户端(这样您的解决方案将更具可扩展性,也更加简单)
因此您的新解决方案(如果您当然决定采用它的话 :))将如下所示:
- 组collection
- 数据collection
- 一对多从组到 collection(只需阅读文档如何完成)
然后您的代码将如下所示:
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% 准确,但我希望你明白了。
祝你好运:)
我想在以下查询中显示每个关系中的所有对象。但它仍然是空的。我尝试使用此代码,但没有用。我希望有一个人可以帮助我。提前致谢
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!");
}
}
});
}
}
}
});
抱歉我的英语不好:)
我建议你使用指针而不是关系(在你的情况下),我会解释原因:
在循环中 运行 findInBackground 不是最佳做法,因为如果您的数据集 (mData) 大小很大,您将对服务器执行 mData.size 调用,这不是最佳做法而且也不可扩展。我建议你使用指针数组(你可以阅读更多相关内容here) 通过使用数组,您只需要 一个 服务调用即可将所有数据发送给您的客户端(这样您的解决方案将更具可扩展性,也更加简单)
因此您的新解决方案(如果您当然决定采用它的话 :))将如下所示:
- 组collection
- 数据collection
- 一对多从组到 collection(只需阅读文档如何完成)
然后您的代码将如下所示:
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% 准确,但我希望你明白了。
祝你好运:)