我的 query.findInBackground 没有在 android 中执行
my query.findInBackground not getting executed in android
我在 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() 中的代码并未全部调用。
我认为您还没有理解如何在 Parse 中正确查询。
当您定义解析查询时。 get 查询应包含您尝试查询的 table 的名称。此外,返回的查询通常是 ParseObjects,因此我希望您的回调应该是 new 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());
}
}
});
显然,您需要将 "ParseTableName" 替换为您尝试在解析中查询的 table 的名称。
我实际上是通过使用 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);
}
}
});
}
如果您想了解有关实现此功能的更多详细信息,
您感觉代码未被调用的原因是因为您在“.findInBackground”操作完成之前return从该方法中退出。请记住,查询是在后台线程上执行的。所以这就是你的代码 运行:
- ParseQuery 查询=ParseQuery.getQuery(Sessions.class);
- final List sessionHeaders = null;
------> 1. query.findInBackground(弹出到后台线程)
- return sessionHeaders;(当你到达此处时,sessionHeaders 可能仍为空)。
因此更改代码逻辑并等待回调 return 秒,然后再对 "sessionHeaders" 对象进行任何处理。
我在 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() 中的代码并未全部调用。
我认为您还没有理解如何在 Parse 中正确查询。
当您定义解析查询时。 get 查询应包含您尝试查询的 table 的名称。此外,返回的查询通常是 ParseObjects,因此我希望您的回调应该是 new 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());
}
}
});
显然,您需要将 "ParseTableName" 替换为您尝试在解析中查询的 table 的名称。
我实际上是通过使用 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);
}
}
});
}
如果您想了解有关实现此功能的更多详细信息,
您感觉代码未被调用的原因是因为您在“.findInBackground”操作完成之前return从该方法中退出。请记住,查询是在后台线程上执行的。所以这就是你的代码 运行:
- ParseQuery 查询=ParseQuery.getQuery(Sessions.class);
- final List sessionHeaders = null;
------> 1. query.findInBackground(弹出到后台线程) - return sessionHeaders;(当你到达此处时,sessionHeaders 可能仍为空)。
因此更改代码逻辑并等待回调 return 秒,然后再对 "sessionHeaders" 对象进行任何处理。