所以我正在寻找一种在异步任务完成后只运行一段代码的方法。该代码与Request.executeAsync();
facebooksdk for android 中的相关。我将用于解释的代码是:
public class Home extends Activity {
TextView welcomeTextView;
private JSONObject userProfile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
userProfileFetched = false;
welcomeTextView = (TextView)findViewById(R.id.welcome);
populateUserProfile();
Log.d("USER_PROFILE", userProfile.toString()); //NullPointerException occurs here
}
private void populateUserProfile() {
Request.newMeRequest(Session.getActiveSession(), new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
userProfile = response.getGraphObject().getInnerJSONObject();
}
}).executeAsync();
}
}
上面带有注释的行指向我的应用程序意外关闭的行。当我第一次开始这个活动时,这个onCreate
方法被调用了一些家务。然后调用一个异步populateUserProfile()
执行请求的函数。me
如果我response.getGraphObject().getInnerJSONObject().toString()
在onCompleted()
函数中记录存在,我可以清楚地看到我正在寻找的完美结果,即登录用户的 JSONObject,但是,如上面的代码所示,如果我将该函数的返回值分配给userProfile
变量然后记录它在onCreate()
方法中的函数调用之后,然后我的应用程序意外停止并在该Log
行抛出 NullPointerException。
我知道发生这种情况是因为me
在我记录 JSONObject 时请求尚未完成userProfile
,这就是为什么它还没有分配给任何东西,所以我需要知道如何等待函数onCompleted
中的方法populateUserProfile()
以便userProfile
对象可以是成功分配给登录用户的信息?
换句话说,我怎么能等待me
请求的异步任务完成,然后登录userProfile
到LogCat?
希望我清楚并期待一个解释性的答案。