2012-03-07 89 views
0

我有一個PreferenceActivity來自Web服務(呼叫轉移號碼,語音郵件狀態等)AsyncTask:我如何處理來自DoInBackground的結果?

類看起來像這樣得到的數據:

public class SettingsActivity extends PreferenceActivity 
{ 
UserController userControl; 
ListPreference lp; 
public SharedPreferences prefs; 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    userControl = new UserController(getParent()); 
    addPreferencesFromResource(R.layout.settings); 

    new PullNumbersTask().execute(); 

} 

    private class PullNumbersTask extends AsyncTask<Void, Void, String[]> 
{ 
    private ProgressDialog Dialog; 
    private String[] numbers; 
    private boolean vmStatus; 
    private String[] cfInfo; 
    public PullNumbersTask() 
    { 
     Dialog = new ProgressDialog(getParent()); 
     Dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    } 


    protected void onPreExecute() 
    { 
     Dialog.setMessage("Henter brugerindstillinger.."); 
     Dialog.show(); 
    } 

    @Override 
    protected String[] doInBackground(Void... arg0) 
    { 
     numbers = userControl.GetNumbers(); // Returns a String array containing available numbers 
     Dialog.setProgress(30); 
     vmStatus = userControl.GetVoicemailStatus(); // Returns a boolean containing voicemail status(enabled/disabled) 
     Dialog.setProgress(80); 
     cfInfo = userControl.GetCallForwardInfo(); // Returns a String array containing Call forward info. 
     Dialog.setProgress(100); 

     return null; 
    } 



    protected void onPostExecute(String[] result) 
    { 
     lp = (ListPreference) findPreference("shownumber_list"); 
     lp.setEntries(result); 
     lp.setEntryValues(result); 
     Dialog.dismiss(); 
    } 

} 

我決定,我希望有一個單一的AsyncTask調用執行我所有的Web服務調用 - 但我如何設置我的偏好onPostExecute的數據?

回答

1

而不是使用從doInBackground()方法String[]的返回值,定義AyncTask你需要傳遞給onPostExecute()法領域內的類。

此外,您應該避免直接從doInBackground()更新進度對話框,因爲它不會在UI線程中執行。 AsynClass提供了將參數傳遞給onProgressUpdate()方法以反映後臺執行進度變化的可能性。

更多細節在這裏:http://developer.android.com/reference/android/os/AsyncTask.html

0

什麼doInBackground返回將作爲參數傳遞給onPostExecute

因此,從Web服務獲取您的偏好doInBackground並將其作爲字符串數組返回。

onPostExecute將該String Array作爲參數。然後應用首選項。

+0

正如你可以看到doInBackground我獲得兩個字符串數組和一個布爾值從UserController中返回。就像這樣簡單地返回一個字符串數組不會工作。 – CodePrimate 2012-03-07 14:23:04

+0

然後返回一個Bundle或ArrayList .. – 2012-03-07 14:25:29

相關問題