package com.hyrt.cei.util; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.res.Resources; import android.os.Handler; import android.os.Looper; import android.os.Message; /** * */ public class TimeOutHelper { // 用于绑定线程开始时间 private static ThreadLocal<Long> timeThreadLocal = new ThreadLocal<Long>(); // 用于绑定线程超时任务引用变量 private static ThreadLocal<Runnable> taskThreadLocal = new ThreadLocal<Runnable>(); // 用于存储所有的超时任务引用变量 private static Map<Long, Runnable> taskContainer = new HashMap<Long, Runnable>(); public Context context; public ProgressDialog progressDialog; // 超时时间 public final static long timeout = 15000; // 超时通知消息标志位 public final static int TIMEOUT_VALUE = 1; // 服务端异常标志位 public final static String EXPSERVER_FLAG = "2"; // 客户端异常标志位 public final static String EXPCLIENT_FLAG = "3"; // 没有数据标志位 public final static String NODATA_FLAG = "4"; // 数据加载完毕标志位 public final static String ALDATA_FLAG = "5"; // 用户名密码错误标志位 public final static String PASSERROR_FLAG = "6"; //用户名密码不能为空 public final static String PASSNULL_FLAG = "7"; //无法获取当前位置 public final static String NOGIS_FLAG = "8"; //成功标志当前企业 public final static String SUCCGIS_FLAG = "9"; //成功标志当前企业 public final static String NOROLE_FLAG = "10"; //设备号与账号不匹配 public final static String ERROR_DEVICE_FLAG = "11"; //设备号已经绑定 public final static String DEVICEEXIST_FLAG = "12"; public TimeOutHelper(Context context) { this.context = context; } /** * 提示消息接收器 */ public Handler messageHandler = new Handler(Looper.getMainLooper()) { public void handleMessage(android.os.Message msg) { int value = msg.arg1; if (value == TIMEOUT_VALUE) { if (progressDialog != null) { progressDialog.dismiss(); } installFailerDialog(null); return; } uninstallDialog(); AlertDialog.Builder builder = new Builder(context); builder.setTitle("提示"); builder.setMessage(msg.obj.toString()); builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); try { builder.create().show(); } catch (Exception e) { e.printStackTrace(); } }; }; /** * 定时器 */ public void installTimerTask() { /* Runnable timeOutRunnable = new Runnable() { @Override public void run() { Message msg = messageHandler.obtainMessage(); msg.arg1 = TIMEOUT_VALUE; messageHandler.sendMessage(msg); } }; messageHandler.postDelayed(timeOutRunnable, timeout); Long startTime = System.currentTimeMillis(); timeThreadLocal.set(startTime); taskThreadLocal.set(timeOutRunnable); taskContainer.put(startTime, timeOutRunnable);*/ } /** * 进度框 */ public void installProcessingDialog() { progressDialog = new ProgressDialog(context); progressDialog.setTitle("提示"); progressDialog.setMessage("正在加载..."); progressDialog.setButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { progressDialog.dismiss(); uninstallTimerTask(ALDATA_FLAG); } }); try { progressDialog.show(); } catch (Exception e) { e.printStackTrace(); } } /** * 确认失败框 */ public void installFailerDialog(DialogInterface.OnClickListener listener) { AlertDialog.Builder builder = new Builder(context); builder.setTitle("提示"); builder.setMessage("当前网路不通,请稍后访问!"); if (listener == null) { builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ((Activity)context).finish(); dialog.dismiss(); } }); } else { builder.setPositiveButton("确认", listener); } try { builder.create().show(); } catch (Exception e) { e.printStackTrace(); } } /** * 卸载定时器 */ public boolean uninstallTimerTask(String returnCode) { /* if (timeThreadLocal.get() == null) { Iterator<Long> sets = taskContainer.keySet().iterator(); while (sets.hasNext()) { Long keyL = sets.next(); if (keyL < System.currentTimeMillis()) { messageHandler.removeCallbacks(taskContainer.get(keyL)); } } } else { messageHandler.removeCallbacks(taskThreadLocal.get()); } if (timeThreadLocal.get() == null || System.currentTimeMillis() - timeThreadLocal.get() > timeout) { return false; } if (returnCode.trim().equals(EXPSERVER_FLAG)) { Message msg = messageHandler.obtainMessage(); msg.obj = "服务端繁忙.."; messageHandler.sendMessage(msg); return false; } else if (returnCode.trim().equals("") || returnCode.trim().equals(EXPCLIENT_FLAG)) { Message msg = messageHandler.obtainMessage(); msg.obj = "网络不稳定.."; messageHandler.sendMessage(msg); return false; } else if (returnCode.trim().equals(NODATA_FLAG)) { Message msg = messageHandler.obtainMessage(); msg.obj = "没有数据了.."; messageHandler.sendMessage(msg); return false; }else if (returnCode.trim().equals(PASSERROR_FLAG)) { Message msg = messageHandler.obtainMessage(); msg.obj = "用户名密码错误.."; messageHandler.sendMessage(msg); return false; }else if (returnCode.trim().equals(PASSNULL_FLAG)) { Message msg = messageHandler.obtainMessage(); msg.obj = "用户名密码不能为空.."; messageHandler.sendMessage(msg); return false; }else if (returnCode.trim().equals(NOGIS_FLAG)) { Message msg = messageHandler.obtainMessage(); msg.obj = "无法获取当前位置.."; messageHandler.sendMessage(msg); return false; }else if (returnCode.trim().equals(SUCCGIS_FLAG)) { Message msg = messageHandler.obtainMessage(); msg.obj = "标注成功.."; messageHandler.sendMessage(msg); }else if (returnCode.trim().equals(NOROLE_FLAG)) { Message msg = messageHandler.obtainMessage(); msg.obj = "此主体不在网格内无权操作.."; messageHandler.sendMessage(msg); return false; }else if (returnCode.trim().equals(ERROR_DEVICE_FLAG)) { Message msg = messageHandler.obtainMessage(); msg.obj = "设备号与账号不匹配.."; messageHandler.sendMessage(msg); return false; }else if (returnCode.trim().equals(DEVICEEXIST_FLAG)) { Message msg = messageHandler.obtainMessage(); msg.obj = "此设备号已绑定.."; messageHandler.sendMessage(msg); return false; } */ return true; } /** * 取消定时框 */ public void uninstallDialog() { if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } } }