从parse.com加载的变量值,在函数返回后重置为0

时间:2015-04-24 01:37:31

标签: android parse-platform

在我的片段中,我已经声明了food变量

public class EatingFragment extends Fragment  {

...
static int food = 0;

}

我从parse.com数据库加载变量。在onCreateView()函数中,我调用函数loadSwallowCount(),实现如下

void loadSwallowCount() {

        SharedPreferences pref = this.getActivity().getApplicationContext().getSharedPreferences("MyPref", 0);
        String id = pref.getString("parse_object_id", "empty");
        if (id == "empty") {
            food = 0;
            Log.d("Not stored"," Swallow count not stored on device");
        }
        else {
            ParseQuery<ParseObject> query = ParseQuery.getQuery("UserData");
            query.getInBackground(id, new GetCallback<ParseObject>() {
                public void done(ParseObject onlineData, ParseException e) {
                    if (e == null) {
                        food = onlineData.getInt("SwallowCount");
                        Log.d("mes", "food is " + food);
                    }
                }
            });
        }

    }

当我在loadSwallowCount函数中测试食物数量时,我得到了正确的值。但是,在函数返回onCreateView()之后,我再做一个日志,奇怪的是food的值是0。

1 个答案:

答案 0 :(得分:0)

loadSwallowCount是一个使用方法调用getInBackground的函数,该方法在new GetCallback<ParseObject>中具有异步回调。

这意味着您的代码会在调用回调之前到达onCreateView的日志。

在这种情况下,只有在执行回调后才能使用food变量。

试试这个:

public void done(ParseObject onlineData, ParseException e) {
    if (e == null) {
        food = onlineData.getInt("SwallowCount");
        processFoodValue();
    }
}