我正在使用Parse做Android应用程序。我使用findInBackground进行查询,它在后台线程上进行网络连接并在主线程中进行回调(Parse文档)。我在这里尝试:
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("objectId", clickedUserId);
query.setLimit(1);
query.findInBackground(new FindCallback<ParseUser>() {
public void done(List<ParseUser> objects, ParseException e) {
if (e == null) {
clickedUser = objects.get(0);
Log.d("yerchik/user","clicked user in thread: "+clickedUser);
}
});
所以我的日志(“yerchik / user”):
D/yerchik/user﹕ clicked user in thread: com.parse.ParseUser@427229f0
这意味着我设置了clickedUser变量。
但是如果我尝试访问findInBackground调用之外的clickedUser对象,我会得到null。我虽然“完成”方法在主线程上运行,不是吗?
答案 0 :(得分:1)
内部活动
public class Activity {
public void updateUI(ParseUser user){
Log.d("yerchik/user","clicked user in thread: "+user.getName());
textview.setText(user.name);
progressbar.setVisibility(View.GONE);
}
}
在您的控制器内
ParseQuery<ParseUser> query = ParseUser.getQuery();
query.whereEqualTo("objectId", clickedUserId);
query.setLimit(1);
query.findInBackground(new FindCallback<ParseUser>() {
public void done(List<ParseUser> objects, ParseException e) {
if (e == null) {
activity.updateUI(objects.get(0));
}
});
这样,done方法会在调用时更新ui(当线程完成时)。
希望这会有所帮助。