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 に答える