0

在开发Android应用程序时,时不时会遇到异常发生但无法通过堆栈追溯的情况,因为此时显示的堆栈仅提及系统方法,而没有提及我的任何代码行。例如,如果我错误地将不正确的字符串传递给 Float.parseFloat,我会得到如下信息:

Thread [<1> main] (Suspended)   
LoadedApk$ReceiverDispatcher$Args.run() line: 710   
ActivityThread$H(Handler).handleCallback(Message) line: 587 
ActivityThread$H(Handler).dispatchMessage(Message) line: 92 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 3729    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 507  
ZygoteInit$MethodAndArgsCaller.run() line: 874  
ZygoteInit.main(String[]) line: 632 
NativeStart.main(String[]) line: not available [native method]  

还有这个:

Thread [<1> main] (Suspended (exception RuntimeException))  
LoadedApk$ReceiverDispatcher$Args.run() line: 722   
ActivityThread$H(Handler).handleCallback(Message) line: 587 
ActivityThread$H(Handler).dispatchMessage(Message) line: 92 
Looper.loop() line: 123 
ActivityThread.main(String[]) line: 3729    
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 507  
ZygoteInit$MethodAndArgsCaller.run() line: 874  
ZygoteInit.main(String[]) line: 632 
NativeStart.main(String[]) line: not available [native method]  

问题是 - 我如何查明导致问题的代码行?在不正确使用 parseFloat 的情况下,我希望看到堆栈中提到 parseFloat 以及包含调用的方法。

4

1 回答 1

1

在 Eclipse 的 DDMS 视图中检查 Logcat。这将向您显示更好的堆栈跟踪,了解错误在代码中的确切位置以及错误是什么

前任。我写了一个测试应用程序,像你说的那样无效地使用 Float.parseFloat 并在 logcat 中得到以下错误

04-19 12:56:55.929: E/AndroidRuntime(8532): FATAL EXCEPTION: main
04-19 12:56:55.929: E/AndroidRuntime(8532): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.testing/com.test.testing.TestingActivity}: java.lang.NumberFormatException
04-19 12:56:55.929: E/AndroidRuntime(8532):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1768)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1784)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:939)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at android.os.Looper.loop(Looper.java:130)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at android.app.ActivityThread.main(ActivityThread.java:3835)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at java.lang.reflect.Method.invokeNative(Native Method)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at java.lang.reflect.Method.invoke(Method.java:507)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:864)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at dalvik.system.NativeStart.main(Native Method)
04-19 12:56:55.929: E/AndroidRuntime(8532): Caused by: java.lang.NumberFormatException
04-19 12:56:55.929: E/AndroidRuntime(8532):     at org.apache.harmony.luni.util.FloatingPointParser.parseFltImpl(Native Method)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at org.apache.harmony.luni.util.FloatingPointParser.parseFloat(FloatingPointParser.java:321)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at java.lang.Float.parseFloat(Float.java:323)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at com.test.testing.TestingActivity.onCreate(TestingActivity.java:15)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-19 12:56:55.929: E/AndroidRuntime(8532):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1722)
04-19 12:56:55.929: E/AndroidRuntime(8532):     ... 11 more

我们看到错误是由以下原因引起的java.lang.NumberFormatException ,向下钻取我们看到它来自这里:

at com.test.testing.TestingActivity.onCreate(TestingActivity.java:15)

它指向我在第 15 行的 onCreate 方法中的活动。如果我查看第 15 行,我会看到 Float.parseFloat("bacon"); 并找到我的问题。我们不能将培根解析为浮点数(尽管这可能很美味),所以它会引发错误。

于 2012-04-19T16:48:10.110 回答