java-无法将值从doInBackground分配给主类
作者:互联网
我有一个android类,在其中初始化我的变量:
public class myClass extends Activity {
String itemIdString;
...
}
然后我在onCreate方法中调用AssyncTask
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.next_item_caller);
Log.d("Before " +itemName);
new getItemNumber().execute();
Log.d("After" +itemName);
...
return "success";
}
在AssyncTask中,我解析JSON对象并将值分配给变量:
class getItemNumber extends AsyncTask<String, String, String> {
protected void onPreExecute() {
super.onPreExecute();
Log.d("getItemNumber", "On pre-execute");
}
protected String doInBackground(String... args) {
//parse here
itemIdString = c.getString(TAG_ITEM_ID);
Log.d(TAG, itemIdString);
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.d("getItemNumber", "on Post-Execute");
}
我在AssyncTask中的日志按预期方式打印值,但是在onCreate中,值之前和之后为null?我应该如何分配这些字符串,以便我也可以从其他方法访问它们?谢谢
解决方法:
AsyncTask的doInBackground在另一个线程上运行.
onCreate在UI线程上运行.
因此,当您调用AsyncTask.execute()时,无需等待它完成并继续下一行.
Log.d("After" +itemName);
要检测doInBackground何时完成,您可以使用便捷的回调方法onPostExecute:
private class MyTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
// doInBackground finished, use your variable now
}
}
标签:variable-assignment,java,android 来源: https://codeday.me/bug/20191120/2042679.html