android 请求网络异步加载

时间:2014-05-18 15:42:07   收藏:0   阅读:314
/**
 * 封装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<Object,Object,Map>{
		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);
		}
	}
}

android 请求网络异步加载,布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!