android 请求网络异步载入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
		}
	}
}

以上是关于android 请求网络异步载入的主要内容,如果未能解决你的问题,请参考以下文章

Android异步载入学习笔记之四:利用缓存优化网络载入图片及ListView载入优化

Android异步载入全解析之开篇瞎扯淡

Android批量图片载入经典系列——afinal框架实现图片的异步缓存载入

(源代码分析)Android-Universal-Image-Loader (图片异步载入缓存库)的使用配置

Android之封装好的异步网络请求框架

Android异步载入AsyncTask具体解释