0

我知道printStackTrace()应该避免在 Android 应用程序中使用,我们应该使用Log类。

在此之后,我尝试记录如下错误:

try {
   //do something  
} catch (Exception e) {
   Log.d(TAG, "General Exception:\n", e);
} 

我得到这样的输出:

Log level: Verbose
12-27 17:20:21.468: DEBUG/MyApp Page two fragment(11193): General IOException:

我没有得到关于IOException.

有人可以告诉我我做错了什么吗?!

4

5 回答 5

1

改为这样做:

  Log.d(TAG, e.getClass().getSimpleName() + ": " + e.getMessage());
于 2012-12-27T16:35:06.787 回答
1

没有第三个参数!

如果您阅读sdk 文档,android.utils.Log需要两个参数,这是使用的一般准则:

  1. 标识消息的标签(通常可以定义为public static final String TAG="myActivity";
  2. 一条消息,请注意这是一个字符串,因此在您的情况下,它需要是这样的:
尝试 {
   //做点什么  
} 捕捉(异常 e){
   Log.d(TAG, "一般例外:\n" + e);
}

注意字符串连接运算符的用法。

编辑:注意:日志确实有一个重载,它确实可以采用第三个参数,但通常使用具有两个参数的方法,关于第三个参数,即SDKThrowable中记录的。尽管如此,我很少在我的项目中使用它,因为具有两个参数的方法足以满足我的需求。

于 2012-12-27T17:47:59.840 回答
0

您将获得通用异常,一个顶级对象,避免口袋妖怪异常处理(必须全部捕获)并捕获特定异常。但这不是您没有看到异常详细信息的原因:尝试ioe.getMessage()

   try{
       startActivity( alertIntent );
   }catch(IOException ioe)
   {
       Log.e("error", "startActivity exception "+ ioe.getMessage());
   }

如果您需要知道日志记录方法的签名,只需查看文档:http: //developer.android.com/reference/android/util/Log.html

更多细节和想法: http: //blog.nelsondev.net/ ?p=187

于 2012-12-27T16:36:08.863 回答
0
Log.v(); // Verbose
Log.d(); // Debug
Log.i(); // Info
Log.w(); // Warning
Log.e(); // Error

了解更多信息

Log.e("error", String.valueOf(e.getMessage()));
于 2012-12-27T17:31:55.093 回答
0

改为执行这些操作::

try {
 //do something  
    } 
catch (Exception e) {
    Log.e(TAG, "General Exception::"+e);
    } 
于 2012-12-27T17:53:21.193 回答