解析FindInBackground:回调中的变量集在主线程中为null,但回调也在主线程上运行

时间:2015-11-27 17:46:32

标签: android multithreading parse-platform

我正在使用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。我虽然“完成”方法在主线程上运行,不是吗?

1 个答案:

答案 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(当线程完成时)。
希望这会有所帮助。

相关问题