9

こんにちはうまくいけば、これはよく書かれた質問であるための基準を満たしています。私はプログラミングに不慣れで、Androidで登山者向けのアプリケーションを作成しようとしています。このアプリケーションは、トレーニング期間中の現在の能力に基づいて、登山者が何を登るべきかをユーザーに通知します。このアプリでは、ユーザーが登山能力と壁の長さを入力する必要があります。

SharedPrefencesこれを使用して、数値編集テキストフィールドとリストを使用して設定メニューを設定しました。編集テキストの文字列をfloat/double / intとして使用しようとしたため、最初はクラスキャスト例外が発生しました(3つすべてを試しました!)。

そのエラーを解決するために文字列をdoubleに変換しましたが、解決策を見つけることができなかっDouble = Double.valueof(StringFromPrefernce) たエラーを生成しています。java.util.FormatFlagsConversionMismatchException: %o does not support ' '

このアプリでは、ユーザーは最初に設定メニューにアクセスできますが、値を設定すると、設定メニューにアクセスしようとすると、この強制終了が発生します。

解決:

私のpreferences.xmlで、文字列を参照していました。その文字列には、強制終了の原因となる%記号が含まれていました。%記号を削除すると、問題が修正されました。

4

6 に答える 6

21

Android 4での変更のようです。文字列内の%記号を2倍にすると、機能しているように見えます-%はエスケープ文字のように見えるので、%%で自己エスケープしました。

于 2013-02-28T07:21:10.817 に答える
9

解決:

私のpreferences.xmlで、文字列を参照していました。その文字列には、強制終了の原因となる%記号が含まれていました。%記号を削除すると、問題が修正されました。

于 2012-08-29T10:19:04.183 に答える
7

自動翻訳を行うためのツールを使用していたので、それを取得していました。% sの代わりに入れていました%s

于 2017-12-10T05:53:26.997 に答える
1

formatted="false"文字列に属性を追加する必要があります

AndroidXMLパーセント記号を参照してください

于 2019-05-01T04:42:42.490 に答える
0

入力文字列をトリミングしてみてください。

Double d = Double.valueof(StringFromPrefernce.trim());

これにより、文字列の最初と最後から不要な空白が削除されます。また、無効な入力を避けるために、呼び出しをtry/catchで囲むことをお勧めします。

Double d = 0;
try
{
    d = Double.valueof(StringFromPrefernce.trim());
}
catch(NumberFormatException e)
{
    e.printStackTrace(); 
}
于 2012-07-31T23:32:49.173 に答える
0

RominaLiuzziのコメントによると。%を削除する必要はありません。あなたは%%でそれを逃れることができます

于 2018-03-28T13:58:02.503 に答える