2013-10-21 107 views
0

在我的主要活動中,我獲得了一個名爲data的數組列表。我打電話給一個asynctask,並做一些東西,給了我一個不同的arraylist稱爲值。未添加到arraylist中的對象(asynctask)

在asynctask的post執行中,我想使用'values'中的項將一些對象添加到'data'中。但是,在調試時我注意到這些對象不會被添加。

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添加項目? Idk如何解決這個問題,我需要列表視圖的數據列表。

+0

你確定有什麼值嗎? – njzk2

+1

定義「不要添加」 – njzk2

+0

在輸出項目之前和之後添加一些日誌記錄以確保它們實際上保存着您認爲它們的值。此外,您可能將不得不分享更多的代碼。爲了解決你的擔憂,不要簡單地在AsyncTask中添加語句不會導致它們不被添加。 – FoamyGuy

回答

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) { 
} 
} 
+0

tyvm。得到它的工作:D – Aelion

0

我不認爲你應該在onPostExecute方法中創建對象。相反,請在擴展AsyncTask的類的doInBackground-method中創建它,然後在onPostExecute-metod中使用set-methods。