在我的片段中,我已经声明了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。
答案 0 :(得分:0)
loadSwallowCount
是一个使用方法调用getInBackground
的函数,该方法在new GetCallback<ParseObject>
中具有异步回调。
这意味着您的代码会在调用回调之前到达onCreateView
的日志。
在这种情况下,只有在执行回调后才能使用food
变量。
试试这个:
public void done(ParseObject onlineData, ParseException e) {
if (e == null) {
food = onlineData.getInt("SwallowCount");
processFoodValue();
}
}