AsyncTask onPostExecute 未执行原因

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


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章