zoukankan      html  css  js  c++  java
  • 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);
    		}
    	}
    }
    

  • 相关阅读:
    eclipse 下载 WindowBuilder
    CLOB、BLOB , CLOB与BLOB的区别
    rpm 安装并配置MySQL(包含指定数据存储路径)
    此Flash Player 与您的地区不相容,请重新安装Adobe Flash Player问题解决
    Eclipse 如何添加 更换字体(转载)
    Eclipse安装WebJavaEE插件、Eclipse编写HTML代码(综合问题统一记录)
    关于hp proliant sl210t服务器raid 1阵列配置(HP P420/Smart Array P420阵列卡配置)
    LINUX下EFIBOOTMGR的使用,删除UEFI主板多余启动项和添加启动项
    安装Linux系统时LSI RAID卡的驱动挂载
    IBM x3250m5安装redhat 6.5 加载raid卡驱动
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5232054.html
Copyright © 2011-2022 走看看