0

在我的主要活动中,我得到了一个名为 data 的数组列表。我调用了一个 asynctask 并做一些事情,这给了我一个不同的数组列表,称为值。

在异步任务的后期执行中,我想使用“值”中的项目将一些对象添加到“数据”中。但是,在调试时我注意到没有添加对象。

public class MainActivity extends Activity
{

    ArrayList<DataItem> data;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    data = new ArrayList<DataItem>();
    update();


}

public void update()
{

    AsyncCallAWS thisTask = new AsyncCallAWS();
    thisTask.execute(); 
}

private class AsyncCallAWS extends AsyncTask<String, Void, Void>
{   
    ArrayList<String> values = new ArrayList<String>(); 

   protected void onPostExecute(Void result)
    {
        Log.i(TAG, "onPostExecute");
        DataItem d;
        for(String s : values)
        {
            d = new DataItem();
            d.setValue(s);
            d.setDataStreamName("test");
            data.add(d);        
        }

    }

//code to fill array

我猜这是因为我尝试从 asynctask 添加项目?我知道如何解决这个问题,我需要列表视图的数据数组列表。

4

2 回答 2

1

在 AsyncTask 类覆盖方法onProgressUpdate()中,您将在其中向数组添加元素。然后doInBackground()调用publishProgress()发送元素到onProgressUpdate(). 这里http://developer.android.com/reference/android/os/AsyncTask.html - 是一个很好的例子。

private class TestAsyncTask extends AsyncTask<Object, String, Object> {

@Override
protected Object doInBackground(Object... params) {
    String item = "";

    //Do some stuff

    publishProgress(item);

    return null;
}

@Override
public void onProgressUpdate(String... value) {
    data.add(value[0]);
}

@Override
protected void onPostExecute(Object result) {
}
}
于 2013-10-21T20:11:36.533 回答
0

我认为您不应该在 onPostExecute 方法中创建对象。而是在扩展 AsyncTask 的类的 doInBackground-method 中创建它,然后在 onPostExecute-metod 中使用 set-methods。

于 2013-10-21T20:19:05.830 回答