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();
		}
    	
    }


 

 

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