我在Android应用程序中使用解析我的数据。由于某种原因,query.findInBackground中的代码没有被执行。
public List<Date> sessionHeaderFetch(){
Log.d("test", "session fetch entry");
ParseQuery<Sessions> query = ParseQuery.getQuery(Sessions.class);
final List<Date> sessionHeaders = null;
query.findInBackground(new FindCallback<Sessions>() {
@Override
public void done(List<Sessions> sessionsObjects, com.parse.ParseException e) {
Log.d("test", "session internal entry");
if (e == null) {
Log.d("test", "Retrieved " + sessionsObjects.size() + " sessions");
for (Sessions session : sessionsObjects) {
sessionHeaders.add(session.getNetsDate());
};
} else {
Log.d("score", "Error: " + e.getMessage());
}
}
});
Log.d("test", "session last value");
return sessionHeaders;
}
public void done()中的代码并未全部被调用。
答案 0 :(得分:0)
我不认为你已经理解了如何在Parse中正确查询。
定义解析查询时。 get查询应包含您尝试查询的表的名称。返回的查询通常也是ParseObjects,所以我希望你的回调应该是新的FindCallback()。
我已经调整了下面的解析查询。
ParseQuery<Sessions> query = ParseQuery.getQuery("ParseTableName");
final List<Date> sessionHeaders = null;
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> sessionsObjects, com.parse.ParseException e) {
Log.d("test", "session internal entry");
if (e == null) {
// Find succeeded, so do something
} else {
Log.d("score", "Error: " + e.getMessage());
}
}
});
显然你需要更换&#34; ParseTableName&#34;使用您尝试在解析时查询的表的名称。
答案 1 :(得分:0)
我实际上是通过使用ArrayList来解决它的,List初始化存在一些问题,结果也是以异步方式获取的,所以我调用这些函数的函数得到了空值,所以我不得不通过调用函数来调用也可以异步解析获取函数。
但查询可以像这样编写并且有效。
public void sessionFetch(Date headers, final ParseIOListener<Sessions> listener){
ParseQuery<Sessions> query = ParseQuery.getQuery(Sessions.class);
Log.d("test", "input header" + headers );
query.whereEqualTo("NetsDate",headers);
final ArrayList<Sessions> sessionsData = new ArrayList<Sessions>();
query.findInBackground(new FindCallback<Sessions>() {
@Override
public void done(List<Sessions> sessionsObjects, com.parse.ParseException e) {
if (e == null) {
for (Sessions session : sessionsObjects) {
Log.d("test", "output objects" + session.toString() );
sessionsData.add(session);
Log.d("test", "Retrieved -- sessions" + sessionsObjects.size() );
}
listener.onDataRetrieved(sessionsData);
} else {
listener.onDataRetrieveFail(e);
}
}
});
}
如果您想了解有关实施此问题的更多详情,请check this link
答案 2 :(得分:0)
您感觉未调用代码的原因是您在“.findInBackground”操作完成之前从方法返回。请记住,查询是在后台线程上执行的。这就是你的代码运行方式:
因此,在对“sessionHeaders”对象进行任何处理之前,请更改代码的逻辑并等待回调返回。