android自定义异常处理与错误日志上传
来源:互联网 发布:java 调外部接口 编辑:程序博客网 时间:2024/06/05 11:27
android自定义异常处理与错误日志上传
使用场景
1.作为一个android开发者,我们在使用真机调试的时候如果不建立adb连接是很难查看程序报出的错误信息的,我们通过使用此方法可以将错误日志捕获并且存储到本地或者上传到服务器。
2.当我们的应用程序上线,可能会因为机型问题导致我们的程序出现问题,我们可以通过此方法来将错误日志上传到我们服务器上,通过查看日志来使我们不断的完善我们的APP
代码实现
一般在application中调用此方法Thread.setDefaultUncaughtExceptionHandler(AppException.getAppExceptionHandler());
异常处理的主类
</pre><pre code_snippet_id="1968315" snippet_file_name="blog_20161105_1_4989140" name="code" class="java">/** * @Description 应用程序异常类:用于捕获异常和提示错误信息 * @author lhn * @created 2016-5-21 */public class AppException extends Exception implements UncaughtExceptionHandler {private static final long serialVersionUID = 1L;/** 系统默认的UncaughtException处理类 */private Thread.UncaughtExceptionHandler mDefaultHandler;/** 无参的构造函数 */private AppException() {this.mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();}/** 有参的构造函数 */private AppException(Exception excp) {super(excp);this.saveErrorLog(excp);}/** * @Description 保存异常日志 * * @param Exception * excp(异常日志) */public void saveErrorLog(Exception excp) {//定义错误日志文件存储信息String errorlog = "errorlog.txt";String savePath = "";String logFilePath = "";//文件输出FileWriter fw = null;PrintWriter pw = null;try {// 判断是否挂载了SD卡String storageState = Environment.getExternalStorageState();if (storageState.equals(Environment.MEDIA_MOUNTED)) {//设置存储路径savePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/OSChina/Log/";//实例化FileFile file = new File(savePath);if (!file.exists()) {//创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。file.mkdirs();}//日志路径logFilePath = savePath + errorlog;}// 没有挂载SD卡,无法写文件if (logFilePath == "") {return;}//实例化logFileFile logFile = new File(logFilePath);//判断是否已经存在if (!logFile.exists()) {logFile.createNewFile();} else {logFile.delete();logFile.createNewFile();}//实例化文件输出fw = new FileWriter(logFile, true);pw = new PrintWriter(fw);//在命令行打印异常信息在程序中出错的位置及原因excp.printStackTrace(pw);//释放资源pw.close();fw.close();} catch (Exception e) {e.printStackTrace();} finally {if (pw != null) {pw.close();}if (fw != null) {try {fw.close();} catch (IOException e) {}}}//结束此错误ActivityActivityCollector.finishAll();}/** * @Description 获取APP异常崩溃处理对象 * * @return AppException */public static AppException getAppExceptionHandler() {return new AppException();}@Overridepublic void uncaughtException(Thread thread, Throwable ex) {//如果异常没有被处理if (!handleException(ex) && mDefaultHandler != null) {//进行异常捕获mDefaultHandler.uncaughtException(thread, ex);}}/** * @Description 自定义异常处理:收集错误信息&发送错误报告 * * @param Throwable * ex(异常信息) * @return true:处理了该异常信息;否则返回false */private boolean handleException(Throwable ex) {if (ex == null) {return false;}// APP崩溃异常报告final String crashReport = getCrashReport(OneLeadPosApplication.getOneLeadPosApplication(), ex);// 错误信息存储到本地saveErrorLog((Exception) ex);// 显示异常信息&发送报告(上传到服务器)// new Thread() {// public void run() {// Looper.prepare();// UIHelper.sendAppCrashReport(context, crashReport);// Looper.loop();// }//// }.start();return true;}/** * @Description 获取APP崩溃异常报告 * * @param Context * context(上下文), Throwable ex(异常信息) * @return String */private String getCrashReport(Context context, Throwable ex) {StringBuffer exceptionStr = new StringBuffer();// android版本以及系统型号exceptionStr.append("Android: " + android.os.Build.VERSION.RELEASE+ "(" + android.os.Build.MODEL + ")\n");// 异常信息exceptionStr.append("Exception: " + ex.getMessage() + "\n");//?StackTraceElement[] elements = ex.getStackTrace();for (int i = 0; i < elements.length; i++) {exceptionStr.append(elements[i].toString() + "\n");}// 返回组成的StringBufferreturn exceptionStr.toString();}}
1 0
- android自定义异常处理与错误日志上传
- php日志错误异常处理
- android 通过UncaughtExceptionHandler处理和上传错误日志
- Android自定义异常处理
- 异常与错误处理
- 错误与异常处理
- 异常与错误处理
- 错误与异常处理
- 错误与异常处理
- 错误与异常处理
- 异常处理与错误处理
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
- mvc自定义上传控件错误异常提示
- MVC3全局异常处理与异常日志
- php 中用户触发错误与记录错误日志及异常处理
- Android自定义错误日志收集
- Laravel错误与日志处理
- hibernate 调用mysql存储过程
- 面向对象六原则
- AVL树实现c++版
- Linux Centos7 nexus搭建maven私服
- Android 上传SVN忽略文件(AS、Eclipse)
- android自定义异常处理与错误日志上传
- [生存志] 第17节 历代大事件概览 西晋
- iOS原生SQLite3使用
- android学习网址集锦
- leetcode-75 Sort Colors
- 【python3】collections系列介绍
- spark SQL 数据保存到MYSQL中的执行日志
- AAA 草根程序员如何进入 BAT?我来告诉你
- 深度学习技术系列(1):Mosaic Model — 不良图片检测开源模型