Подтвердить что ты не робот

Почему Android Lint предупреждает о том, что String.format использует стандартную локаль при явном использовании Locale.US?

Я изначально называл String.format следующим образом:

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

Что сделало Android Lint генерировать это предупреждение:

Неявно использование локали по умолчанию является общим источником ошибок: вместо этого используйте String.format(Locale,...)

Итак, я изменил его, чтобы использовать Locale.US явно, на основе того, что я читал в http://developer.android.com/reference/java/util/Locale.html в разделе "Будьте осторожны с локалью по умолчанию":

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

Почему Android Lint по-прежнему генерирует одно и то же предупреждение? Мне нужно очистить проект в Eclipse, чтобы избавиться от него, когда большинство предупреждений просто исчезают, как только исправляется линия нарушения. Я не уверен, что я делаю что-то неправильно или нет.

4b9b3361

Ответ 1

Очистка и восстановление проекта должны работать.

Кстати, вы можете использовать Locale.getDefault() для "позаботиться" о текстах, не написанных на английском языке.

Ответ 2

Подразумеваемая локаль по умолчанию в случае конвертации

Вызов String#toLowerCase() или #toUpperCase() без указания явного языкового стандарта является распространенным источником ошибок. Причина этого заключается в том, что эти методы будут использовать текущую локаль на пользовательском устройстве, и даже если код работает правильно при разработке приложения, в некоторых локалях произойдет сбой. Например, в турецком языке вместо "i" прописными буквами заменяется "я".

Если вы хотите, чтобы методы просто выполняли замену ASCII, например, для преобразования имени перечисления, вместо этого вызовите String#toUpperCase(Locale.US). Если вы действительно хотите использовать текущую локаль, вместо этого вызовите String#toUpperCase(Locale.getDefault()).

http://developer.android.com/reference/java/util/Locale.html#default_locale

Ответ 3

когда я упомянул локаль с форматом, предупреждение lint просто исчезло.

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

Ответ 4

Вы можете отключить это предупреждение для всего приложения, gradle (Module: app) код ниже в свой gradle (Module: app)

 android {
    ...
    lintOptions {
            disable 'DefaultLocale'
        }
    ...
    }

Ответ 5

Просто добавьте Ваш язык; для английского языка,

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