我的代码有一个小问题。我正在尝试在Doinbackground行为上执行凌空请求,然后使用其结果来设置一些布局元素。这是异步片段:
private class MyAsyncTask extends AsyncTask<String, Void, Message>
{
@Override
protected Message doInBackground(String... params) {
rm = new RequestManager(MessageDisplay.this);
idM = params[0];
retrieveMessage(new VolleyCallbackOp(){
public void onSuccess(List<Message> ml) {
m = ml.get(0);
Log.d("print1", m.getContent()); <---- this is fine
}
});
Log.d("print2", m.getContent()); <---- m always null
return m;
}
@Override
protected void onPostExecute(Message m) {
super.onPostExecute(m);
Log.d("messaggio", m.getContent());
mds = new MessageDisplaySetter(MessageDisplay.this);
View v = mds.setMessageDisplayInfo(m, 3);
contentD.addView(v);
}
}
});
}
此代码在Activity onCreate((中被调用:
Message m = new Message();
String target2 = i.getExtras().getString("messageId");
new MyAsyncTask().execute(target2);
问题是log" print2"告诉变量 m 为null,而" print1"是可以的。您是否有任何提示将此请求的结果传递给相关的OnPostExecute((?
print2
日志为null的原因 - 是因为您处于竞赛状态。通过调用new VolleyCallbackOp
,您正在执行 ASYNCHROUNOUS 网络调用可能需要一段时间才能完成。您的代码不会等到完成。这就是为什么print2
大多数时候是无效的。
您的情况有多种解决方案。其中之一是使用onSuccess
的回调机制并在那里进行逻辑。