//onCreate()中直接注册 捕捉异常信息并上传服务器
![]()
//异常上报类
public class MyCrashException implements UncaughtExceptionHandler {
private Context mContext = null;
private UncaughtExceptionHandler mDefaultHandler = null;
private String crashPostUrl = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
public MyCrashException(Context context) {
mContext = context;
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
}
public int postExceptionToServer(Throwable ex) {
// 获取异常信息
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
ex.printStackTrace(printWriter);
Throwable cause = ex.getCause();
while (cause != null) {
cause.printStackTrace(printWriter);
cause = cause.getCause();
}
printWriter.close();
String result = writer.toString();
HttpResponse response = null;
HttpParams httpParams = new BasicHttpParams();
String versionStrXml = null;
HttpConnectionParams.setConnectionTimeout(httpParams, 1000 * 30);
HttpConnectionParams.setSoTimeout(httpParams, 1000 * 30);
HttpClient httpClient = new DefaultHttpClient(httpParams);
HttpPost httpPost = new HttpPost(crashPostUrl);
try {
List params = new ArrayList();
params.add(new BasicNameValuePair("imei", "xxxxxx"));
params.add(new BasicNameValuePair("mac", "xxxxxx"));
params.add(new BasicNameValuePair("msg", result));
HttpEntity entity = new UrlEncodedFormEntity(params, "utf-8");
httpPost.setEntity(entity);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
response = httpClient.execute(httpPost);
} catch (Exception e) {
e.printStackTrace();
}
if (null == response) {
return 0;
}
if (200 == response.getStatusLine().getStatusCode()) {
byte[] mResultXml = null;
try {
mResultXml = EntityUtils.toByteArray(response.getEntity());
} catch (IOException e) {
e.printStackTrace();
}
try {
versionStrXml = new String(mResultXml, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return 200;
} else {
LogUtils.e("---MyCrashException", "StatusCode!=200 " + response.getStatusLine().getStatusCode());
}
return 0;
}
@Override
public void uncaughtException(Thread thread, final Throwable ex) {
if (null == ex && mDefaultHandler != null) {
// 如果用户没有处理则让系统默认的异常处理器来处理
mDefaultHandler.uncaughtException(thread, ex);
} else {
new Thread(new Runnable() {
public void run() {
while (postExceptionToServer(ex) == 0) ;
// 退出程序
android.os.Process.killProcess(android.os.Process.myPid());
System.exit(1);
}
}).start();
}
}
}