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;
        }
    }
  • 相关阅读:
    【BZOJ 4581】【Usaco2016 Open】Field Reduction
    【BZOJ 4582】【Usaco2016 Open】Diamond Collector
    【BZOJ 4580】【Usaco2016 Open】248
    【BZOJ 3754】Tree之最小方差树
    【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版
    【51Nod 1622】【算法马拉松 19C】集合对
    【51Nod 1616】【算法马拉松 19B】最小集合
    【51Nod 1674】【算法马拉松 19A】区间的价值 V2
    【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险
    【BZOJ 1065】【Vijos 1826】【NOI 2008】奥运物流
  • 原文地址:https://www.cnblogs.com/gongcb/p/2758860.html
Copyright © 2011-2022 走看看