我有一个PreferenceActivity从Web服务获取数据(呼叫前转号码,语音邮件状态等)
该课程如下:
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?
答案 0 :(得分:1)
不是使用String[]
作为doInBackground()
方法的返回值,而是在AyncTask
中定义一个类,其中包含您需要传递给onPostExecute()
方法的字段
此外,您应该避免直接从doInBackground()
更新进度对话框,因为它不会在UI线程中执行。 AsynClass
可以将参数传递给onProgressUpdate()
方法,以反映后台执行进度的变化。
此处有更多详情:http://developer.android.com/reference/android/os/AsyncTask.html
答案 1 :(得分:0)
doInBackground 返回的内容将作为参数传递给 onPostExecute 。
因此,请从 doInBackground 中的Web服务中获取您的首选项,然后将其作为字符串数组返回。
onPostExecute 将该String Array作为参数。然后应用首选项。