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 请求网络异步加载,布布扣,bubuko.com

时间: 2024-08-24 14:53:49

android 请求网络异步加载的相关文章

Android Asynchronous Http Client--Android 开源的网络异步加载类

整理Android Asynchronous Http Client的使用 Android Asynchronous Http Client(AHC) 一个回调式的Android网络请求库 概括: AHC是基于Apache的HttpClient 库,所有的网络请求过程在UI线程之外进行,而回调是在Handler里面处理.也可以再Service或者后台程序里面使用,这个库会自动识别并在相应的Context进行处理. 特点: 异步发送HTTP请求,在回调函数中处理响应 HTTP请求过程不在UI线程进

Android利用Volley异步加载数据完整详细示例(一)

MainActivity如下: package cc.cn; import java.util.HashMap; import org.json.JSONObject; import android.app.Activity; import android.content.Context; import android.os.Bundle; import com.android.volley.AuthFailureError; import com.android.volley.RequestQ

Android利用Volley异步加载数据完整详细示例(二)

MainActivity如下: package cc.y; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.os.Bundle; import android.util.LruCache; import android.widget.ImageView;

Android之ListView异步加载图片且仅显示可见子项中的图片

折腾了好多天,遇到 N 多让人崩溃无语的问题,不过今天终于有些收获了,这是实验的第一版,有些混乱,下一步进行改造细分,先把代码记录在这儿吧. 网上查了很多资料,发现都千篇一律,抄来抄去,很多细节和完整实例都没看到,只有自己一点点研究了,总体感觉 android 下面要显示个图片真不容易啊. 项目主要实现的功能: 异步加载图片图片内存缓存.异步磁盘文件缓存解决使用 viewHolder 后出现的图片错位问题优化列表滚动性能,仅显示可见子项中的图片无需固定图片显示高度,对高度进行缓存使列表滚动时不会

Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案

Android中ListView异步加载图片错位.重复.闪烁问题分析及解决方案 我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图片错位.重复.闪烁等问题,其实这些问题总结起来就是一个问题,我们需要对这些问题进行ListView的优化. 比如ListView上有100个Item,一屏只显示10个Item,我们知道getView()中convertView是用来复用View对象的,因为一个Item的对应一个View对象,而ImageView控件就是View对象通

Android之ListView异步加载网络图片(优化缓存机制)【转】

网上关于这个方面的文章也不少,基本的思路是线程+缓存来解决.下面提出一些优化: 1.采用线程池 2.内存缓存+文件缓存 3.内存缓存中网上很多是采用SoftReference来防止堆溢出,这儿严格限制只能使用最大JVM内存的1/4 4.对下载的图片进行按比例缩放,以减少内存的消耗 具体的代码里面说明.先放上内存缓存类的代码MemoryCache.java: public class MemoryCache { private static final String TAG = "MemoryCa

Android利用Volley异步加载数据(JSON和图片)完整示例

Android利用Volley异步加载数据(JSON和图片)完整示例 MainActivity.java package cc.testvolley; import org.json.JSONObject; import android.app.Activity; import android.app.ProgressDialog; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v

浅谈Android中的异步加载之ListView中图片的缓存及优化三

     隔了很久没写博客,现在必须快速脉动回来.今天我还是接着上一个多线程中的异步加载系列中的最后一个使用异步加载实现ListView中的图片缓存及其优化.具体来说这次是一个综合Demo.但是个人觉得里面还算有点价值的就是里面的图片的缓存的实现.因为老实说它确实能在实际的项目中得到很好的应用.主要学习来源于慕课网中的异步加载学习,来自徐宜生大神的灵感.本次也就是对大神所讲知识的一个总结及一些个人的感受吧. 这次是一个综合的Demo,主要里面涉及到的知识主要有:网络编程.异步加载.JSON解析.

浅谈android中的异步加载一

1.为什么需要异步加载. 因为我们都知道在Android中的是单线程模型,不允许其他的子线程来更新UI,只允许UI线程(主线程更新UI),否则会多个线程都去更新UI会造成UI的一个混乱有些耗时的操纵(例如网络请求等),如果直接放到主线程中去请求的话则会造成主线程阻塞,而我们系统有规定的响应时间,当响应的时间超过了了阻塞的时间就会造成"Application No Response",也就是我们熟知的ANR错误解决上述问题的时候:我们一般使用的是线程或者线程池+Handler机制如果线程