Log.e注意问题:

"find bar"字符串中间有空格,所有搜索不到,但是用下划线连接起来,过滤日志时就能搜到。

Log.e("find bar",points[0].toString());
package com.lbstock;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
import java.lang.Thread.UncaughtExceptionHandler;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;  import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Build;
import android.os.Environment;
import android.os.Looper;
import android.util.Log;
import android.widget.Toast;  /** * UncaughtException处理类,当程序发生Uncaught异常的时候,由该类来接管程序,并记录发送错误报告.* @author way*/
public class CrashHandler implements UncaughtExceptionHandler {  private static final String TAG = "CrashHandler";  private Thread.UncaughtExceptionHandler mDefaultHandler;// 系统默认的UncaughtException处理类  private static CrashHandler INSTANCE = new CrashHandler();// CrashHandler实例  private Context mContext;// 程序的Context对象  private Map<String, String> info = new HashMap<String, String>();// 用来存储设备信息和异常信息  private SimpleDateFormat format = new SimpleDateFormat(  "yyyy-MM-dd-HH-mm-ss");// 用于格式化日期,作为日志文件名的一部分  /** 保证只有一个CrashHandler实例 */  private CrashHandler() {  }  /** 获取CrashHandler实例 ,单例模式 */  public static CrashHandler getInstance() {  return INSTANCE;  }  public void init(Context context) {mContext = context;  mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();// 获取系统默认的UncaughtException处理器  Thread.setDefaultUncaughtExceptionHandler(this);// 设置该CrashHandler为程序的默认处理器  }  /** * 当UncaughtException发生时会转入该重写的方法来处理 */  public void uncaughtException(Thread thread, Throwable ex) {  if (!handleException(ex) && mDefaultHandler != null) {  // 如果自定义的没有处理则让系统默认的异常处理器来处理  mDefaultHandler.uncaughtException(thread, ex);  } else {  try {  Thread.sleep(3000);// 如果处理了,让程序继续运行3秒再退出,保证文件保存并上传到服务器  } catch (InterruptedException e) {  e.printStackTrace();  }  // 退出程序  android.os.Process.killProcess(android.os.Process.myPid());  System.exit(1);  }  }  /** * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.* @param ex      异常信息* @return true 如果处理了该异常信息;否则返回false. */  public boolean handleException(Throwable ex) {  if (ex == null)  return false;  new Thread() {  public void run() {  Looper.prepare();Log.e("lbsotck",String.valueOf(ex.getMessage()));Toast.makeText(mContext, "很抱歉,程序出现异常,即将退出", Toast.LENGTH_LONG).show();Looper.loop();  }  }.start();  // 收集设备参数信息  collectDeviceInfo(mContext);  // 保存日志文件  saveCrashInfo2File(ex);  return true;  }  /** * 收集设备参数信息* @param context */  public void collectDeviceInfo(Context context) {  try {  PackageManager pm = context.getPackageManager();// 获得包管理器  PackageInfo pi = pm.getPackageInfo(context.getPackageName(),  PackageManager.GET_ACTIVITIES);// 得到该应用的信息,即主Activity  if (pi != null) {  String versionName = pi.versionName == null ? "null"  : pi.versionName;  String versionCode = pi.versionCode + "";  info.put("versionName", versionName);  info.put("versionCode", versionCode);  }  } catch (NameNotFoundException e) {  e.printStackTrace();  }  Field[] fields = Build.class.getDeclaredFields();// 反射机制  for (Field field : fields) {  try {  field.setAccessible(true);  info.put(field.getName(), field.get("").toString());  Log.d(TAG, field.getName() + ":" + field.get(""));  } catch (IllegalArgumentException e) {  e.printStackTrace();  } catch (IllegalAccessException e) {  e.printStackTrace();  }  }  }  private String saveCrashInfo2File(Throwable ex) {  StringBuffer sb = new StringBuffer();  for (Map.Entry<String, String> entry : info.entrySet()) {  String key = entry.getKey();  String value = entry.getValue();  sb.append(key + "=" + value + "\r\n");  }  Writer writer = new StringWriter();  PrintWriter pw = new PrintWriter(writer);  ex.printStackTrace(pw);  Throwable cause = ex.getCause();  // 循环着把所有的异常信息写入writer中  while (cause != null) {  cause.printStackTrace(pw);  cause = cause.getCause();  }  pw.close();// 记得关闭  String result = writer.toString();  sb.append(result);  // 保存文件  long timetamp = System.currentTimeMillis();  String time = format.format(new Date());//  String fileName = "crash-" + time + "-" + timetamp + ".log";String fileName = "crash-" + time + ".log";if (Environment.getExternalStorageState().equals(  Environment.MEDIA_MOUNTED)) {  try {  File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +                           File.separator + "1lbg");Log.i("CrashHandler", dir.toString());  if (!dir.exists())  dir.mkdir();  FileOutputStream fos = new FileOutputStream(new File(dir,  fileName));  fos.write(sb.toString().getBytes());  fos.close();  return fileName;  } catch (FileNotFoundException e) {  e.printStackTrace();  } catch (IOException e) {  e.printStackTrace();  }  }  return null;  }
} 

android 异常打印相关推荐

  1. android 设置打印级别

    https://www.csdn.net/gather_27/MtTakg4sNjY3Ni1ibG9n.html 一.LK层: 首先,在LK中,有一个对log打印级别的控制文档,其路径一般为:vend ...

  2. android 实现打印功能,Android通过OTG线连接打印机实现打印功能

    一.创建demo调用PrinterShare服务,虽然能找到相应的类和方法但调用后没有反应 //打印图片,进入PrinterShare打印图片预览界面 public static void print ...

  3. Android 蓝牙打印小票与WiFi打印小票两种打印方式的实现(带有图片和二维码)

    转载至: https://blog.csdn.net/u011056653/article/details/74308254 最近在做小票打印这块,项目需求是蓝牙和WiFi两种都要实现,开始做的时候也 ...

  4. android异常 More than one file was found with OS independent path ‘META-INF/XXX‘

    android异常 More than one file was found with OS independent path 'META-INF/XXX' 参考文章: (1)android异常 Mo ...

  5. Android 异常: failed to connect to localhost/127.0.0.1

    Android 异常: failed to connect to localhost/127.0.0.1 参考文章: (1)Android 异常: failed to connect to local ...

  6. traceback异常打印

    traceback异常打印 参考文章: (1)traceback异常打印 (2)https://www.cnblogs.com/shangpolu/p/7206348.html (3)https:// ...

  7. android异常(2)

    1.java.lang.IllegalStateException: The content of the adapter has changed but ListView did not recei ...

  8. android jni打印log信息

    今天,讲讲在jni中如何打印logxx,用来进行调试. 一.实现 1.修改Android.mk文件. 在这个配置文件中我们加入如下一行代码: LOCAL_LDLIBS += -llog 注意:这行代码 ...

  9. android 打印机列表中,在android中打印只搜索打印机

    我已经做了一个android应用程序,我试图打印一个示例文本文件,我想使用wifi连接打印机,我试过这个链接Wifi printing in android但它只是去搜索wifi打印机和什么都不做,我 ...

最新文章

  1. node.js学习5--------------------- 返回html内容给浏览器
  2. 分享Kali Linux 2017年第29周镜像文件
  3. 故障排错-解决迅雷播放器在Windows 10中长时间停止响应
  4. OpenCASCADE:绘制测试线束之入门
  5. service 层 拼接的html 代码如何直接返回_代码分层的设计之道
  6. (转)HttpURLConnection与 HttpClient 区别
  7. eclipse maven scm
  8. Visual Studio “类视图”和“对象浏览器”图标
  9. Leetcode 142. Linked List Cycle II
  10. Give root password for maintenance 问题的解决方法
  11. RESTful源码笔记之RESTful Framework的基本组件
  12. VS2005发布网站问题及aspnet_merge.exe”已退出,代码为 1的错误以及所有代码文件生成一个dll
  13. 单片机ADC0808,DAC0832信号发生器
  14. 【操作系统真象还原】Mac安装配置bochs
  15. plc c语言做报警,wincc声音报警C脚本版
  16. vscode中文注释斜体修改
  17. 更换主板后 Office无法激活问题解决
  18. 深度学习笔记——情感分析
  19. 如何有效管理游戏开发过程
  20. Linux 命令xxd输出十六进制

热门文章

  1. c语言变量值与数组元素值交换,编写一个交换变量值的函数,利用该函数交换数组a和数组b中的对应元素值。要求尽量用指针的方法实现。数组a...
  2. android asmack和xmpp的关系,Android即时通讯开发之XMPP (一)初识XMPP协议和asmack
  3. java 本地通信_java – 本地JVM之间的通信
  4. mysql 随机选择数据_从MySQL随机选取数据
  5. php中post提交参数_PHP中Http协议post请求参数
  6. 31 号要和谁跨年呢?
  7. 每日一皮:临近截止日期, 产品经理就这样看着我...
  8. 自律到极致-人生才精致「第3期」:中奖结果
  9. linux图形化卡在开机界面,linux怎么在开机时进入图形界面
  10. python 画roc曲线