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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值