package com.lan.nicehair.common.net; import android.os.AsyncTask; import android.os.Handler; import com.lan.nicehair.R; import com.lan.nicehair.utils.AppLog; import com.lan.nicehair.utils.AppManager; /** * AsyncTask 使用线程池控制线程数量,提高线程利用率 提供统一的网络访问接口 Response 提供Loading时的Dialog * 提供网络资源的清除 提供默认的Exception处理 运行环境 Android 1.6 TargetID >= 4 * * @author lanyj */ public abstract class NetAsyncTask extends AsyncTask<String, Integer, String> { private static final String TAG = "NetThread"; public static final String HANDLE_SUCCESS = "0"; public static final String HANDLE_FAILED = "1"; private int dialogId=0; //默认的预处理 public int getDialogId() { return dialogId; } public void setDialogId(int dialogId) { this.dialogId = dialogId; } public NetAsyncTask(){} public NetAsyncTask(Handler uiHandler){ this.uiHandler = uiHandler; } public NetAsyncTask(Handler uiHandler,int id){ this.uiHandler = uiHandler; } public Handler uiHandler; // 向Activity反馈相关UI更新 public void setUiHandler(Handler uiHandler) { this.uiHandler = uiHandler; } public HttpTask httptask; /** * 自定义预处理信息 */ abstract protected void handlePreExecute(); /** * 相当于线程中的run函数,在线程中运行比较耗时的动作,比如访问网络,解析等 * @param arg0 * @return * @throws Exception */ abstract protected String handleNetworkProcess(String... arg0) throws Exception; /** * 对返回结果的处理 */ abstract protected void handleResult(); /** * 网络请求前的预处理 */ @Override protected void onPreExecute() { //设置使用哪种进度条 //1是默认,弹出框等待,2是重写handlePreExecute,进行自定义;其他均为不显示 showDialog(dialogId); } @Override protected String doInBackground(String... arg0) { String result = null; try { httptask=new HttpTask(uiHandler); result = handleNetworkProcess(arg0); } catch (Exception e) { result = null; AppLog.d(TAG, e.getMessage()); } finally { //closeConnection(); } return result; } @Override protected void onPostExecute(String result) { if ("0".equals(result)) { handleResult(); }else if("1".equals(result)){ //没有的得到数据 //new Exception("网络异常!"); handleResult(); }else { new Exception("网络异常!"); handleResult(); } dismissDialog(getDialogId()); } /** * 显示进度 * @param dialogId */ private void showDialog(int dialogId) { switch (dialogId) { case 1: AppManager.updateUI(uiHandler, R.id.ui_show_dialog, R.id.dialog_waiting); break; case 2: handlePreExecute(); break; default: break; } } /** * 取消进度显示 * @param dialogId */ private void dismissDialog(int dialogId) { switch (dialogId) { case 1: AppManager.updateUI(uiHandler, R.id.ui_dismiss_dialog, R.id.dialog_waiting); break; default: break; } } /** * Positive close the running AsyncTask * @param asyncTask */ public static void closeTask(final AsyncTask<?, ?, ?> asyncTask) { if (taskIsRunning(asyncTask)) { asyncTask.cancel(true); } } public static boolean taskIsRunning(final AsyncTask<?, ?, ?> asyncTask) { if (asyncTask != null&& (asyncTask.getStatus() == AsyncTask.Status.RUNNING)) { return true; } else { return false; } } }