2012-11-23 8 views
19

Android hedefleme:toUpperCaseLocale()() - Ben daha yeni bir Android SDK sürümü hedeflenen beri Şimdi bu kod satırında bir uyarı elde edilmiştir, 4.2

return getString(R.string.usertab1).toUpperCase() 

bunu üzerine gelin diyor:

Varsayılan yerel ayarı dolaylı olarak kullanmak, yaygın bir hata kaynağıdır: Bunun yerine, toUpperCase(Locale) kullanın.

Bu hatayı nasıl kaldıracağını bilen var mı? Ve şimdi neden bu yöntemi kullanmak için tercih edilen bir yol?

Bu sorunun cevabı, toUpperCase(Locale)'u kullanıp kullanmama konusunda sorun yaşıyorum. Locale nesnesi nereden geliyor?

cevap

32

Sen açıkça varsayılan yerel kullanabilirsiniz: Temelde

return getString(R.string.usertab1).toUpperCase(Locale.getDefault()); 

, sen istemiyorum örtülü bu anlamına gelebilir çünkü cihaz sadece gerçeği olduğunu göz ardı varsayılan kullanmasına izin bir sorun olabilir. Makine tarafından okunabilir içerik için, verilerinizden istediğiniz her zaman yeniden kullanılabilirliği elde etmenizi sağlamak için belirli bir yerel ayarı (örneğin, Locale.ENGLISH) belirtmek isteyebilirsiniz. Kullanıcıyı göstermek için, varsayılan yerel ayarı açıkça belirtmek iyi olmalıdır. Daha eksiksiz bir okuma için

:

Yaygın bir hata makine tarafından okunabilir olması gerekiyordu çıktı üretirken örtülü varsayılan yerel kullanmaktır. Bu, geliştiricinin test cihazlarında (özellikle birçok geliştiricinin en_US kullandığı için) çalışma eğilimi gösterir, ancak kullanıcı daha karmaşık bir yerel ayarda olan bir cihazda çalışırken başarısız olur.

Örneğin, tamsayıları biçimlendiriyorsanız, bazı yerel kullanıcılar ASCII olmayan ondalık basamak kullanmazlar. Başka bir örnek olarak, kayan nokta sayılarını biçimlendiriyorsanız, bazı yerel değerler ondalık noktası olarak ',' ve rakam gruplaması için '.' kullanır. Bu, insan tarafından okunabilir çıktı için doğrudur, ancak başka bir bilgisayara sunulduğunda sorunlara neden olabilir (örneğin, parseDouble(String) böyle bir sayıyı ayrıştırılamıyor). Ayrıca, bir Yerel Ayar yapmayan toLowerCase() ve toUpperCase() aşırı yüklenmelerinden de emin olmalısınız. Örneğin, Türkiye'de 'i' ve 'I' karakterleri 'I' ve 'i''a dönüştürülmez. Bu, Türkçe metin için (kullanıcı girişi gibi) doğru davranış, ancak HTTP başlıklarının uygun olmamasıdır.

- Locale developer documentation

+1

bu almak için daha iyi bir yerde 'GetResources kullanarak herhangi' Context' alabileceğiniz yapılandırma nesnesi, dan() getConfiguration() 'http: // geliştiricisi.. android.com/reference/android/content/res/Configuration.html#locale – adamp

+0

Aynı problemim var. Benim karakterim türkçe ama böyle bir şey göremedim "Locale.TURKISH" Bunu nasıl halledebilirim? –

+1

@ GünayGültekin 'Yeni Yerel Ayarı (" tr_TR ")' yi kullanabilirsiniz: '[** Örnek için tıklayınız **] (http://ideone.com/IavMuX) – Eric

İlgili konular