2013-08-03 25 views
0

我有一個AsyncTask在onPostExecute方法中返回一個值,我知道如何獲得返回值的唯一方法是使用該類的全局成員變量並將其設置爲onPostExecute方法中的值。替代使用全局變量來存儲AsyncTask結果

有沒有更好的方法或替代方法來做到這一點?我現在要做的只是爲此創建許多成員變量。

這裏我在做什麼現在

public class MainClass extends Activity { 
    String takeInString = ""; 

    new DoItAsyncTask().execute(97); 

    // nested inner class of AsyncTask inside of MainClass 
    public class DoItAsyncTask extends AsyncTask<Integer, Void, String>{ 
    String tempString = ""; 

     @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 

        // assign value of global member variable takeInString 
       takeInString = result; 

     } 
    } 

    @Override 
     protected void onPreExecute() { 
     // TODO Auto-generated method stub 

     } 

    @Override 
    protected String doInBackground(Integer... params) { 
     Database dptr = new Database(MainClass.this); 
     dptr.openToRead(); 
     tempString = dptr.getStringFromDatabase(params[0]); 
     dptr.close(); 

     return tempString; 

     } 

} // end DoItAsyncTask 

} // end MainClass 
+0

要與後這個值來做些什麼呢? –

+0

將使用字符串添加到數組列表,這些將用於填充不同片段的列表視圖。所以基本上從SQLite數據庫獲取字符串並將這些字符串放入列表視圖中。所以我需要使用AsyncTask,因爲在UI線程 – Kevik

+0

上做任何數據庫查詢都是不好的形式,你可以從後臺向數組列表添加值。 –

回答

0

嘗試這種方式,通過Object代替IntegerString

new DoItAsyncTask().execute(97, takeInString); 

private class HeavyTask extends AsyncTask<Object, Void, Void> { 

private mLocalStrong = ""; 

@Override 
protected String doInBackground(Object... params) { 
    mLocalInt = (Integer)params[0];  
    mLocalStrong = (String)params[1]; 

    return null; 
    }