今天在主界面的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();
}
}