0

最近、Androidアプリ(GitHubRepo)のアップデートを公開し、Playストアを通じてユーザーからバグレポートを受け取り始めました。トラブルシューティングを試みていますが、エラーの意味を正確に追跡するのに問題があります。

レポートは次のようになります。

java.lang.RuntimeException: Unable to start activity ComponentInfo{ca.ajwest.BeerConverter/ca.ajwest.BeerConverter.BeerConverterActivity}: java.lang.NumberFormatException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NumberFormatException
at org.apache.harmony.luni.util.FloatingPointParser.parseDblImpl(Native Method)
at org.apache.harmony.luni.util.FloatingPointParser.parseDouble(FloatingPointParser.java:283)
at java.lang.Double.parseDouble(Double.java:318)
at java.lang.Double.valueOf(Double.java:356)
at ca.ajwest.BeerConverter.BeerConverterActivity.roundTwoDecimals(BeerConverterActivity.java:1513)
at ca.ajwest.BeerConverter.BeerConverterActivity.calculate(BeerConverterActivity.java:987)
at ca.ajwest.BeerConverter.BeerConverterActivity.access$0(BeerConverterActivity.java:757)
at ca.ajwest.BeerConverter.BeerConverterActivity$21.onTextChanged(BeerConverterActivity.java:469)
at android.widget.TextView.sendOnTextChanged(TextView.java:6584)
at android.widget.TextView.setText(TextView.java:2813)
at android.widget.TextView.setText(TextView.java:2671)
at android.widget.EditText.setText(EditText.java:178)
at ca.ajwest.BeerConverter.BeerConverterActivity.onCreate(BeerConverterActivity.java:541)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
... 11 more

丸め方法で丸められる値と関係があると仮定して正しいですか?

double roundTwoDecimals(double d){
        DecimalFormat twoDForm = new DecimalFormat("#.##");
        return Double.valueOf(twoDForm.format(d));
    }

デバイスでエラーを再現できない場合の対処方法に関するヒントはありますか?このアプリは、ユーザーが数字を入力することに大きく依存しており、私の分野でさまざまな「乱雑な」数字を試した後でも(私はいくつかの非常に長い数字を試しました)、問題なく動作します。

4

1 に答える 1

1

ユーザー ロケールを考慮していない可能性があります。多くのロケールでは、区切り記号にコンマを使用しています。

これにより、フォーマッターはセパレーターとしてポイントを使用するようになります。

double roundTwoDecimals(double d){

    DecimalFormat twoDForm = new DecimalFormat("#.##");
    DecimalFormatSymbols dfSymbols = new DecimalFormatSymbols();
    twoDForm.setDecimalSeparator('.');
    format.setDecimalFormatSymbols(dfSymbols);

    return Double.valueOf(twoDForm.format(d));
}

ユーザーが手動で数字を入力している場合は、ロケール区切り記号を取得して代わりに使用できます。

DecimalFormat.getInstance().getDecimalFormatSymbols().getDecimalSeparator();

PS。あなたの仮定は正しいです。一般に、アプリケーションのパッケージ名が表示されるまでスタック トレースを読みます。これは、問題のある行を指しています。この場合は次のとおりです。

ca.ajwest.BeerConverter.BeerConverterActivity.roundTwoDecimals(BeerConverterActivity.java:1513)
于 2012-11-30T18:19:24.547 に答える