今天在主界面的Activity裏面,通過異步加載後臺數據的時候,用到AsyncTask,發現onPostExecute方法一直沒有執行,因爲這個方法裏面可以進行UI的更新,後來才發現,原來是onPostExecute這個方法裏面的參數必須和AsyncTask裏面定義的一致。
另外,如果還不行,可以試試在onCreate裏面加上下面代碼。
try {
Class.forName("android.os.AsyncTask");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
class GetELTBrandTask extends AsyncTask<String,Integer,String> {//繼承AsyncTask
Spinner spinner_brand;
public GetELTBrandTask(Spinner spinner_brand) {
this.spinner_brand = spinner_brand;
}
@Override
protected String doInBackground(String... params) {//處理後臺執行的任務,在後臺線程執行
// 不能在後臺線程操作ui
//初始化 品牌列表
SoapObject brandsData =WebServiceUtil.getELTBrands();
if (brandsData != null) {
try {
jsonBrand = new JSONObject(brandsData.getProperty(0).toString());
jsonBrandList = jsonBrand.getJSONArray("brandList");
for(int i=0;i<jsonBrandList.length();i++){
JSONObject jsonBrandRow = jsonBrandList.getJSONObject(i);
// 找到數據
list_brand.add(jsonBrandRow.getString("brandname").toString());
}
} catch (JSONException e) {
e.printStackTrace();
showToast(e.getMessage());
}
}
return "" ;
}
protected void onPostExecute(String result) {// 後臺任務執行完之後被調用,在ui線程執行
ArrayAdapter<String> adapter_brand = new ArrayAdapter<String>(
ELTCustomerAmountDetailList.this,
R.layout.simple_list_item_rf, list_brand);
adapter_brand
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
if (list_brand != null) {
spinner_brand.setAdapter(adapter_brand);
}
}
protected void onPreExecute() {// 在doInBackground(Params...)之前被調用,在ui線程執行
super.onPreExecute();
}
protected void onCancelled() {// 在ui線程執行
super.onCancelled();
}
}