Android 异常上报类

//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();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值