package net.yasite.net; import net.yasite.util.ActivityUtil; import android.content.Context; import android.os.Handler; import android.os.Message; import android.widget.Toast; public abstract class HandlerHelp { private Context context; private String error; private HandlerHelp() { } public HandlerHelp(Context context) { this.context = context; } /** * 执行Handler * @return */ public boolean execute() { return execute(true); } /** * * @param hit 提示信息 * @param checkNetwork 是否检查网络情况 true 需要.false 不需要 * @return */ RequestThread t = new RequestThread(); public boolean execute(boolean checkNetwork) { // 检查网络情况 if(checkNetwork && ActivityUtil.isNetworkAvailable(context)){ t.setNetStatus(true); }else{ t.setNetStatus(false); } t.start(); return true; } class RequestThread extends Thread{ boolean netStatus = true; public void setNetStatus(boolean netStatus) { this.netStatus = netStatus; } @Override public void run() { Message msg = new Message(); try { // 设置默认值 msg.what = HttpConstant.MSG_SUCCESSED; if(netStatus){ doTask(msg); }else{ doTaskAsNoNetWork(msg); } } catch (Exception e) { e.printStackTrace(); msg.what = HttpConstant.MSG_ERROR; error = e.getMessage() == null ? "网络连接超时!" : e.getMessage(); } finally { tHandler.sendMessage(msg); } } } Handler tHandler = new Handler() { @Override public void handleMessage(Message msg) { try { switch (msg.what) { case HttpConstant.MSG_SUCCESSED: updateUI(); break; case HttpConstant.MSG_ERROR: error(); break; } } catch (Exception e) { e.printStackTrace(); } finally { tHandler.removeMessages(msg.what); if(t != null){ tHandler.removeCallbacks(t); } } } }; /** * 处理handler异常 */ public void error() { if("服务器繁忙!网络连接超时!服务器异常!请求超时!系统出错!操作失败!".contains(error)){ Toast.makeText(context, error, Toast.LENGTH_SHORT).show(); } } /** * handler * * @param 更新UI */ public abstract void updateUI(); /** * 数据处理 * * @param msg */ public abstract void doTask(Message msg) throws Exception; /** * 无网络时数据处理 * * @param msg */ public abstract void doTaskAsNoNetWork(Message msg) throws Exception; }