zoukankan      html  css  js  c++  java
  • Android进阶篇异步加载数据工具类

    AsyncDataLoader.java:

    /**
     * 异步加载后台数据
     * @author gongchaobin
     * 
     * @version 2011-12-19
     */
    public class AsyncDataLoader extends AsyncTask<Object, Void, Object> {
        private Dialog loadingDialog;
        private Context mContext;
        private List<Object> paramsList = null;
        private String urlFlag;
        private int type;
    
        public final static int MESSAGECODE = 0;//信息编码
        public final static int EXCEPTION = 1;
        
        private boolean showWaitingFlag = false;//是否显示Loading
    
        private String showMessage = "加载中...";//loading显示的文本
    
        private Message msg = new Message();
        
        public static final String GET_AD_INFO = "get_ad_info";
        
        /**
         * @param params[0] Context 上下文
         * @param params[1] urlFlag URL标识
         * @param params[2] paramsList 方法参数
         * @param params[3] type 类型
         */
        @SuppressWarnings("unchecked")
        @Override
        protected Object doInBackground(Object... params) {
            if(params!=null){
                
                mContext = (Context) params[0];//取得上下文
                if(params.length>=2){
                    urlFlag = (String) params[1];// 取得接口标识
                }
                if (params.length>=3) {
                    paramsList = (List<Object>) params[2];// 取得参数
                }
                if(params.length>=4){
                    type = Integer.parseInt(params[3].toString());//取得标识类型
                }
            }
    
            publishProgress();// 调用onProgressUpdate()
            
            Object result = null;
            try {
                if(urlFlag.equals(GET_AD_INFO)){
                    result = DataCommple.getInstance().adRequest();
                }
              //接口方法的调用
            } catch (Exception e) {
                e.printStackTrace();
                msg.what = EXCEPTION;
                msg.obj = e;
            }
            return result;
        }
    
        /**
         * @param result 远端获取到的数据
         * @return
         */
        @Override
        protected void onPostExecute(Object result) {
            try {
                if (showWaitingFlag && loadingDialog != null&&loadingDialog.isShowing()) {
                    loadingDialog.dismiss();
                }
                if (callBack != null) {
                    callBack.handleData(msg, result, type);
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
    
        @Override
        protected void onCancelled() {
    
            super.onCancelled();
        }
    
        @Override
        protected void onProgressUpdate(Void... values) {
            if (showWaitingFlag) {
                if (mContext != null) {
                    loadingDialog =getDialog((Activity) mContext,
                            this.showMessage);
                    loadingDialog.show();
    
                }
    
            }
        }
    
        /**
         *回调对象
         */
        private ICallBackData callBack = null;
    
        /**
         *设置回调对象
         */
        public void setCallBack(ICallBackData cb) {
            this.callBack = cb;
        }
    
        /**
         * 获取数据回调接口
         */
        public interface ICallBackData {
             void handleData(Message msg, Object result, int type);
        }
    
        /**
         * 创建loading对话框
         * @param act
         * @param message
         * @return
         */
        private ProgressDialog getDialog(Activity act,String message){
            ProgressDialog dialog = new ProgressDialog(act);
            dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            dialog.setMessage(message);
            return dialog;
        }
    
        public boolean isShowWaitingFlag() {
            return showWaitingFlag;
        }
    
        public void setShowWaitingFlag(boolean showWaitingFlag) {
            this.showWaitingFlag = showWaitingFlag;
        }
    
        public String getShowMessage() {
            return showMessage;
        }
    
        public void setShowMessage(String showMessage) {
            this.showMessage = showMessage;
        }
    }
  • 相关阅读:
    Docker的安装、配置及其基本使用
    Java提升七:注解
    Java提升六:泛型
    Java提升五:反射与动态代理
    MySQL中如何将主键默认值设为UUID()
    图解Mybatis框架原理及使用
    Java提升四:Stream流
    Java提升三:函数式接口
    Java提升二:Lambda表达式与方法引用
    java提升一:内部类
  • 原文地址:https://www.cnblogs.com/gongcb/p/2758860.html
Copyright © 2011-2022 走看看