如何使用AsyncTask分配全局变量



这里我给出了一个关于全局变量和AsyncTasks问题的小例子。我已经从一个文件中读取了数据,并将该数据分配给了一个字符串,在onPostExecute()方法中,我将该字符串分配给了全局变量。然而,当我为TextView分配"aString"变量时,输出仍然是"nothing"。

我知道,如果你在onPostExecute()方法中进行TextView赋值,它会起作用,但如果我想在AsyncTask之外的方法中使用数据呢。

有人能帮我吗?我想我没有得到什么?

public class GoodAsync extends Activity{
    TextView tv;
    String aString = "nothing";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.asynctasks);
        new AsyncTasker().execute();
        tv = (TextView) findViewById(R.id.async_view);
        tv.setText(aString);
    }
    private class AsyncTasker extends AsyncTask<String, Integer, String>{
        @Override
        protected String doInBackground(String... arg0) {
            AssetManager am = GoodAsync.this.getAssets();
            String string = "";
            try {
                // Code that reads a file and stores it in the string variable
                return string;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return null;
        }
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            aString = result;
        }   
    }
}

也许你想这样做:

public class GoodAsync extends Activity{
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.asynctasks);
    tv = (TextView) findViewById(R.id.async_view);
    new AsyncTasker().execute();
}
    public void setTextView (String text) {
       tv.setText(text);
    }
    private class AsyncTasker extends AsyncTask<String, Integer, String>{
        ....
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            setTextView(result);
        }   
    }
}

您确定AsyncTask正在及时执行吗?

你正在这样做:

new AsyncTasker().execute();
tv = (TextView) findViewById(R.id.async_view);
tv.setText(aString);

这会设置任务,但随后会立即将TextView的值设置为aString变量。

AsyncTask此时很可能仍在执行,因此在代码执行后,aString只获得除"nothing"以外的值。

您没有在等待异步任务完成。。你可以这样做。。

new AsyncTasker().execute().get();
tv = (TextView) findViewById(R.id.async_view);
tv.setText(aString);

相关内容

  • 没有找到相关文章

最新更新