android 请求网络异步加载

jopen 10年前

    /**         * 封装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);                }            }        }