Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 請求網絡異步加載

android 請求網絡異步加載

編輯:關於Android編程

/**
 * 封裝ProecssDialog對話框
 *
 */
public class LoadDialog extends ProgressDialog {
	private String title = "進度對話框";
	private String message = "加載數據中....";
	public LoadDialog(Context context, int theme) {
		super(context, theme);
	}

	/**
	 * 用默認的標題和內容來創建對話框
	 * @param context
	 */
	public LoadDialog(Context context) {
		super(context);
		initDialog();
	}
	/**
	 * 用指定的標題和內容來創建對話框
	 * @param context
	 * @param title
	 * @param message
	 */
	public LoadDialog(Context context,String title,String message){
		super(context);
		if(title != null){
			this.title = title;
		}
		if(message != null){
			this.message = message;
		}
		initDialog();
	}
	/**
	 * 初始化對話框參數,默認對話框不可以取消
	 */
	public void initDialog(){
		setTitle(title);
		setMessage(message);
		setProgressStyle(ProgressDialog.STYLE_SPINNER);
		setCancelable(false);
	}
	/**
	 * 打開對話框,設置回調方法,傳遞需要執行業務方法的類模板,方法名和參數列表
	 * @param callback 回調方法,該方法在對話框關閉後回調,並獲取返回的數據
	 * @param serviceClass 執行業務方法的類模板
	 * @param method 執行業務方法的方法名
	 * @param params 執行業務方法的參數列表
	 */
	public void execute(Callback callback,Class serviceClass,String method,Object... params){
		super.show();
		ServiceAysnTask task = new ServiceAysnTask(callback,serviceClass,method);
		task.execute(params);
	}
	
	/**
	 * 回調方法的接口
	 *
	 */
	public interface Callback{
		public void getResult(Map map);
	}
	
	/**
	 * 與遠程服務通信的線程類
	 * @author BDK
	 * AsyncTask  異步任務
	 */
	private class ServiceAysnTask extends AsyncTask{
		private Class serviceClass;
		private String method;
		private Callback callback;
		public ServiceAysnTask(Callback callback,Class serviceClass,String method){
			this.callback = callback;
			this.serviceClass = serviceClass;
			this.method = method;
		}
		@Override
		protected Map doInBackground(Object... params) {
			Map resultMap = null;
			try {
				Object obj = serviceClass.newInstance();//創建類模板對象
				Class [] paramTypes = new Class[params.length];
				for (int i = 0; i < paramTypes.length; i++) {
					paramTypes[i] = params[i].getClass();
				}
				//根據類模板得到方法
				Method m = serviceClass.getMethod(method, paramTypes);
				resultMap = (Map) m.invoke(obj, params);
			} catch (Exception e) {
				e.printStackTrace();
			} 
			LoadDialog.this.cancel();
			return resultMap;
		}
		@Override
		protected void onPostExecute(Map result) {
			super.onPostExecute(result);
			
			if(result == null){
				Toast.makeText(LoadDialog.this.getContext(), "網絡通信異常", Toast.LENGTH_LONG).show();
				return;
			}
			callback.getResult(result);
		}
	}
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved