我有一个android类,我初始化我的变量:
public class myClass extends Activity {
String itemIdString;
...
}
然后我在AssyncTask
方法
onCreate
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
和值之后的是否为空?我应该如何分配这些字符串,以便我也可以从其他方法访问它们?谢谢
答案 0 :(得分:2)
AsyncTask
的{{1}}在另一个主题上运行。
doInBackground
在UI线程上运行。
因此,当您致电onCreate
时,您不会等待它完成并继续您的下一行
AsyncTask.execute()
要在 Log.d("After" +itemName);
完成后检测,您有一个方便的回调方法doInBackground
:
onPostExecute
答案 1 :(得分:1)
从doInBackgroind方法返回字符串值,然后将其分配给在主线程上运行的onPostExecute方法中的itemIdString
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
return c.getString(TAG_ITEM_ID);
}
protected void onPostExecute(String result)
super.onPostExecute(result);
//assign itemIdString here
itemIdString = result;
}
答案 2 :(得分:0)
另一种方法是,您可以按如下方式检查AsyncTask
的状态:
在onCreate()
中,你可以像这样检查AysncTask的状态:
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute();
if(myAsyncTask.getStatus() == AsyncTask.Status.FINISHED){
// MyAsyncTask completed. assign your variable now
}