0

私の主な活動では、データと呼ばれる配列リストを取得しました。私は asynctask を呼び出し、値と呼ばれる別の配列リストを提供するいくつかのことを行います。

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()呼び出しが行われます。ここhttp://developer.android.com/reference/android/os/AsyncTask.html - は素晴らしい例です。publishProgress()onProgressUpdate()

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 メソッドで作成し、onPostExecute メソッドで set メソッドを使用します。

于 2013-10-21T20:19:05.830 に答える