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

  • 相关阅读:
    Web应用程序的开发步骤
    APAP INCLUDE
    2015-07-12
    oracle自定义异常
    java quartz 设置定时任务串行执行
    java stream peek的使用
    java List转String
    Java打jar包后如何获取resource中的文件
    ImmutablePair和ImmutableTriple的使用
    mvn打jar包示例:依赖打入jar包和依赖打到外部文件夹
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5232054.html
Copyright © 2011-2022 走看看