2013-06-25 2 views
7

enter image description here Im используя андроид 4.2 SDK, я получаю предупреждение на эту строку кода:Как использовать toUppercase (locale) в android 4.2?

String text0 = tagalogText.getText().toString(); 
String textA = text0.substring(0, 1).toUpperCase() + text0.substring(1).toLowerCase(); 

Когда я парить над ним, он говорит:

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

и

имплицитно использование стандарта по умолчанию является общим источником ошибок: вместо этого используйте toLowerCase (Locale).

Я копирую код с Java, а не в Java для android. Кто-нибудь знает, как удалить эту ошибку? И почему теперь это предпочтительный способ использования этого метода?

+0

сделали вы проверили этот ответ http://stackoverflow.com/questions/11063102/using-locales-with-javas-tolowercase-and-touppercase и этот http://stackoverflow.com/questions/13444546/android-adt-21-0-warning-implicitly-using-the-default-locale – surhidamatya

ответ

0

Попробуйте использовать

text0.substring(0, 1).toUpperCase(Locale.ENGLISH); 

С док here

Распространенной ошибкой является неявно использовать локаль по умолчанию при производстве выход предназначается, чтобы быть машиночитаемой. Это, как правило, работает на тестовых устройствах разработчика (особенно потому, что так много разработчиков использует en_US), но не работает при запуске на устройстве, пользователь которого находится в более сложном локали .

Например, если вы форматируете целые числа, некоторые локали будут использовать десятичные цифры, отличные от ASCII, . В качестве другого примера, если вы форматируете чисел с плавающей запятой, некоторые локали будут использовать ',' в качестве десятичной точки и '.' для группировки цифр. Это правильно для чтения с человека, , но может вызвать проблемы, если они представлены на другом компьютере (parseDouble (String) не может разобрать такой номер, например). Вы также должны опасаться перегрузок toLowerCase() и toUpperCase() , которые не принимают локаль: в Турции, например, символы i ' и' I 'не будут преобразованы в' I ' и я'. Это правильное поведение для турецкого текста (например, ввод пользователя), но неуместно, сказать, HTTP-заголовки.

+0

Это те же проблемы, о которых предупреждает, а именно, что локаль по умолчанию может ввести ошибки. – Lesleh

+0

@ Lesleh .. используйте определенный язык. – stinepike

+0

Ваше сообщение первоначально сказало Locale.getDefault(), следовательно мой комментарий. – Lesleh

0

Это означает, что могут существовать языковые проблемы с использованием локали по умолчанию, которая варьируется между системами. Используйте вместо этого:

text0.substring(0, 1).toUpperCase(Locale.US); 
+0

Это обычно происходит в андроиде? –

+0

Это не проблема Android. – Lesleh

+0

Ну, на самом деле я скопировал код из java на ПК, и это действительно так, когда я адаптирую код для Android. Мне просто интересно, почему код с ПК не использовал toUpperCase (Locale.US) ;? –

0

Вы не указали, что вы получили ответ, так что попробуйте это (что-то подобное работал для меня):

text0 = text0.substring(0, 1).toUpperCase(); 
text1 = text0.substring(1).toLowerCase(); 
String textA = text0 + text1; 

Это, кажется, как будто назначение имеет решающее значение.

Дайте мне знать, если это сработает.

Позаботьтесь.

+0

Привет, я попытался использовать ваш код, но он все еще не работал на меня. могу ли я иметь учетную запись ung fb, поэтому я могу связаться с вами об этом. –

+0

Мне очень жаль, что я не вернусь к вам раньше. Вообще-то, я только что видел это, потому что я не вхожу в систему регулярно. У меня нет учетной записи fb. но я удивлен, что назначение не получилось. Если сообщение, которое вы видите, является просто предупреждением, я бы проигнорировал его и продолжил. Береги себя. – Doug

5

Просто необходимо чистый проект.

У меня была такая же проблема. Я не полагался на стандартную локаль и явно пытался использовать Locale.US и Locale.English, но все же получил предупреждение желтого цвета. Ушел после уборки.

string.toLowerCase(Locale.ENGLISH); 
2

Это ворса предупреждение, не ошибка. Причина в том, что локаль по умолчанию следует использовать для данных пользователя - если вы рендерите то, что пользователь может предпочесть видеть в стиле/формате, специфичном для их местоположения.

Вы должны решить, целесообразно ли использовать локаль по умолчанию:

  • если это строка, которая будет использоваться за кулисами и ваша архитектура ожидает, что эта строка будет равномерным на всех устройствах по всему миру, то вы должны указать локаль явно - обычно Locale.US

  • если это пользователь перед строкой или ваша архитектура не заботится, если он отличается от других устройств (например, он используется только в и не ожидается, что он будет находиться в определенном формате, отличном от указанного случая), тогда вы можете смело игнорировать предупреждение о линии.

0

Это, как я ее решил:

string.toUpperCase(getResources().getConfiguration().locale));