我有两个解析查询,我想在单击一个按钮时进行评估。 我在Parse有两个班。我想一次检查两件事。 我的疑问是:
ParseQuery<ParseObject> query =ParseQuery.getQuery("Login");
query.whereEqualTo("x",X);
query.whereEqualTo("y",Y);
在登录的同时,我正在检查两个实体之间的关系。 我的第二个问题是:
ParseQuery<ParseObject> query1 =ParseQuery.getQuery("UserData");
query.whereEqualTo("entity1",entity1);
query.whereEqualTo("entity2",entity2);
现在,如果两个查询都成功,那么用户就可以处理该应用。 如何组合这两个查询,以便两个查询都必须成功
答案 0 :(得分:11)
使用复合查询。以下示例取自Parse Docs,网址为www.parse.com
ParseQuery<ParseObject> lotsOfWins = ParseQuery.getQuery("Player");
lotsOfWins.whereGreaterThan(150);
ParseQuery<ParseObject> fewWins = ParseQuery.getQuery("Player");
fewWins.whereLessThan(5);
List<ParseQuery<ParseObject>> queries = new ArrayList<ParseQuery<ParseObject>>();
queries.add(lotsOfWins);
queries.add(fewWins);
ParseQuery<ParseObject> mainQuery = ParseQuery.or(queries);
mainQuery.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> results, ParseException e) {
// results has the list of players that win a lot or haven't won much.
}
});
答案 1 :(得分:1)
您可以创建CountDownLatch并使用您的查询数量对其进行初始化。然后每个查询将在完成任务时倒计时。
final CountDownLatch mCountDownLatch = new CountDownLatch(2);
ParseQuery<ParseObject> query =ParseQuery.getQuery("Login");
query.whereEqualTo("x",X);
query.whereEqualTo("y",Y);
ParseQuery<ParseObject> query1 =ParseQuery.getQuery("UserData");
query.whereEqualTo("entity1",entity1);
query.whereEqualTo("entity2",entity2);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> parseObjects, ParseException e) {
if (null == e) {
mCountDownLatch.countDown();
}
}
});
query1.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> parseObjects, ParseException e) {
if (null == e) {
mCountDownLatch.countDown();
}
}
});
try {
mCountDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
proceedToApp();
}
您只需创建一个单独的线程,您将从该线程调用await()。
答案 2 :(得分:0)
如果您使用的是JavaScript,我会说“Promises是您的朋友”。
由于您使用的是Java / Android,我建议您查看“Bolts”。
这是来自Parse的博客文章介绍它: http://blog.parse.com/2014/10/15/introducing-bolts-for-parse-sdks/
在您的情况下,onSuccess
会触发第二个查询,或者您将saveTasks
数组替换为findTasks
数组,并保存findInBackground()
个操作。