70

ADT を v. 21 に更新したところ、次のコードに新しい警告が表示されました。

if (e.getMessage().toLowerCase().contains("blabla"))

Implicitly using the default locale is a common source of bugs: Use toLowerCase(Locale) instead

だから私は試します:

if (e.getMessage().toLowerCase(Locale.ENGLISH).contains("blabla"))

しかし、エラーはまだ残っていました!これをどのように修正しますか?

4

7 に答える 7

115

Locale.getDefault()テキストが常に英語であると確信できない場合は、特に使用する必要があります。また、lint を再度実行するか、プロジェクトをクリーンアップすると、通常発生しているような lint エラーは消えます。

于 2012-11-18T21:25:30.933 に答える
33

次をクリックして、プロジェクトをクリーンアップする必要があります。

Build > Clean ProjectまたBuild > Rebuild Project

于 2012-11-20T10:37:10.253 に答える
6

実際にはLocale.getDefault()、ユーザーにテキストを表示することが目標の場合に使用します。ただし、これが Lint チェックの要点であり、Locale.USマシンの可読性/使用法が目的の場合は常に使用する必要があります。Locale.getDefault()指定しないと暗黙的に使用されており、デバイスに独自のデフォルトロケールが指定されている場合、バグを見つけるのが困難になる可能性があるためです。他の誰もが示唆しているように、プロジェクトをいずれかの方法でクリーンアップする必要があるようです。

于 2013-03-08T19:12:01.930 に答える
3

Locale.getDefault() を使用し、プロジェクトをクリーンアップします。

于 2013-03-04T06:45:30.053 に答える
2

おそらくLintのバグです。コードの行全体を切り取ってみてください

if (e.getMessage().toLowerCase(Locale.ENGLISH).contains("blabla"))

保存してから貼り付けます。

于 2014-05-08T21:29:37.100 に答える
2

プロジェクトをクリーンアップしてもうまくいかなかったので、コードにデフォルトのロケールを追加しました。

String.format(Locale.getDefault(), "firstname: %s, lastname: %s", firstName, lastName));

プロジェクトによっては、Localeの説明を参照することをお勧めします。

于 2016-07-19T17:03:05.860 に答える
0

Locale.US を明示的に使用しているときに、Android Lint がデフォルト ロケールを使用して String.format について警告するのはなぜですか? String#toLowerCase を呼び出すときに、どのロケールを指定する必要がありますか? トルコ語など一部の言語では、大文字と小文字の変換規則が異なります (「I」と「i」の文字は、互いに大文字と小文字が変換されません)。

これは Lint ルールのバグだと思います。設定Locale.getDefault()は良い選択です。警告を削除するには、メソッドの前に追加します。

@SuppressLint("DefaultLocale") 
于 2021-02-02T09:27:23.623 に答える