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;
    }
}
原文地址:https://www.cnblogs.com/gongcb/p/2758860.html