编程语言
首页 > 编程语言> > java-无法将值从doInBackground分配给主类

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