doinbackground方法给出空值

时间:2015-11-09 23:08:56

标签: android variables android-asynctask

我正在创建一个Android应用程序,其中我通过制作doinbackground方法并将这些值分配给全局声明的变量来从服务器端获取数据。问题是我在oncreate方法中使用那些变量,它给我空值,因为doinbackground方法在oncreate中使用变量后完成。这可能是什么解决方案?

public void getProfileInfo() {
    String currentUserId = ParseUser.getCurrentUser().getObjectId();
    ParseQuery<ParseObject> query = ParseQuery
            .getQuery(ParseConstants.KEY_USER_INFO);
    query.whereEqualTo(ParseConstants.KEY_USER_ID_INFO, currentUserId);
    query.findInBackground(new FindCallback<ParseObject>() {
        public void done(List<ParseObject> objects, ParseException e) {
            if (e == null) {
                for (ParseObject thisUser : objects) {
                    name = thisUser
                            .getString(ParseConstants.TYPE_INFO_FULLNAME);
                    email = ParseUser.getCurrentUser().getEmail();
                }
            } else {
                Log.d("Activity", "Error: " + e.getMessage());
            }
        }
    });
}

我在使用变量名称和电子邮件之前在oncreate中调用此方法。我检查了名称和电子邮件的值。它给了我正确的价值观。

1 个答案:

答案 0 :(得分:0)

听起来你有一些时间问题。

只是说明显而易见,你不能在后台线程上启动异步任务,然后在不知道任务完成的情况下盲目地使用结果。

完成任务需要触发结果的使用。

所以,无论你做什么来访问这些全局变量&#39;获得空值 - 不要在确定的时间(例如在onCreate中)执行此操作 - 在实际获得结果时执行此操作。

如果结果可能会在您当前尝试访问它们之前返回,请检查它们是否已经返回,如果有,请使用它们。如果他们没有,请等到他们回来。

我将把这项工作的实施留给读者&#34;