web-dev-qa-db-ja.com

Locale.USを明示的に使用している場合、Android Lintはデフォルトのロケールを使用してString.formatについて警告しますか?

私はもともとこの方法でString.formatを呼び出しました:

return String.format("%s %f %f", anotherString, doubleA, doubleB);

Android Lintはこの警告を生成しました:

暗黙的にデフォルトロケールを使用することは、バグの一般的な原因です。代わりにString.format(Locale、...)を使用してください

そこで、 http://developer.Android.com/reference/Java/util/Locale.html で読んだ内容に基づいて、Locale.USを明示的に使用するように変更しました「デフォルトのロケールに注意してください」セクションの下:

return String.format(Locale.US, "%s %f %f", anotherString, doubleA, doubleB);

なぜAndroid Lintはまだ同じ警告を生成しますか?問題のある行が修正されるとすぐにほとんどの警告が消えるとき、Eclipseでプロジェクトをクリーンアップして削除する必要があります。私が何か間違ったことをしているかどうかはわかりません。

51
Nobody Special

プロジェクトのクリーニングと再構築が機能するはずです。

ところで、あなたは英語で書かれていないテキストを「気にする」ためにLocale.getDefault()を使いたいかもしれません。

52

大文字と小文字の変換における暗黙のデフォルトロケール

明示的なロケールを指定せずにString#toLowerCase()または#toUpperCase()を呼び出すことは、バグの一般的な原因です。その理由は、これらのメソッドはユーザーのデバイスの現在のロケールを使用するためであり、アプリを開発しているときにコードが正しく機能しているように見えても、一部のロケールでは失敗するためです。たとえば、トルコ語のロケールでは、iの大文字の置換はIではありません。

メソッドにASCII置換、たとえば列挙名の変換など)だけを実行させたい場合は、代わりにString#toUpperCase(Locale.US)を呼び出してください現在のロケールを使用し、代わりにString#toUpperCase(Locale.getDefault())を呼び出します。

http://developer.Android.com/reference/Java/util/Locale.html#default_locale

8
Paulo Mendonça

ロケールをフォーマットで言及したとき、リント警告は消えました。

String.format(Locale.US,"%02d", selectedInt);

4
Pratheesh

アプリ全体でこの警告を無効にするには、gradle (Module: app)のコードの下に配置します

 Android {
    ...
    lintOptions {
            disable 'DefaultLocale'
        }
    ...
    }
1
GianhTran

ロケールを追加するだけです。英語ロケールの場合、

return String.format(Locale.ENGLISH、 "%s%f%f"、anotherString、doubleA、doubleB);

0