2013-06-04 16 views
36

tôi ban đầu được gọi String.format theo cách này:Tại sao Android Lint cảnh báo về String.format bằng ngôn ngữ mặc định khi sử dụng Locale.US một cách rõ ràng?

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

Mà làm cho Android Lint tạo ra cảnh báo này:

Mặc nhiên sử dụng ngôn ngữ mặc định là một nguồn phổ biến của lỗi: Sử dụng String.format (Locale,. ..) thay vì

Vì vậy, tôi đã thay đổi nó để sử dụng Locale.US một cách rõ ràng, dựa trên những gì tôi đọc ở http://developer.android.com/reference/java/util/Locale.html dưới "Hãy cảnh giác với ngôn ngữ mặc định" phần:

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

Tại sao Android Lint vẫn tạo ra cảnh báo tương tự? Tôi phải làm sạch dự án trong Eclipse để loại bỏ nó, khi hầu hết các cảnh báo chỉ biến mất ngay sau khi dòng vi phạm được sửa. Tôi không chắc mình có làm gì sai hay không.

+1

Cảnh báo Lint không phải là lỗi chút nào. Nó chỉ cố gắng cho bạn biết về hiệu suất, bản dịch và vấn đề tương tự. Tôi cũng nhận được cảnh báo này trong các ứng dụng mà tôi muốn nhắm mục tiêu chỉ trên ngôn ngữ nhất định nhưng, bạn luôn có thể vô hiệu hóa lint bằng cách vào Window> Preferences> Android> Lint Error Checking. Tôi tin rằng trong tình huống tồi tệ nhất có thể có thiết bị mà không có Locale.US có sẵn ở tất cả và do đó nó có thể gây ra một số vấn đề. Tôi đã không phải đối mặt với bất kỳ như vậy cho đến bây giờ mặc dù. – Milan

Trả lời

35

Làm sạch và xây dựng lại dự án sẽ hoạt động.

BTW, bạn có thể muốn sử dụng Locale.getDefault() để "xử lý" các văn bản không được viết bằng tiếng Anh.

+5

Anh ấy đang cố gắng tránh mặc định. – nitind

+1

Như nơi tôi đã hiểu, anh ta cố gắng tránh nó chỉ vì phần "Hãy cảnh giác với miền địa phương mặc định" trong tài liệu. Mặc dù vậy, tôi nói với ông rằng ông "có thể muốn sử dụng" nó, vì nó thực sự nói rằng bạn nên nhận thức được bằng cách sử dụng miền địa phương mặc định trong máy để giao tiếp máy. –

+2

Tôi luôn sử dụng Locale.ROOT cho trường hợp này. Và làm sạch sẽ thoát khỏi cảnh báo lint, như Alejandro đã nói. – suomi35

3

Ngụ ý locale mặc định trong trường hợp chuyển đổi

Calling String#toLowerCase() hoặc #toUpperCase() mà không chỉ định một miền địa phương rõ ràng là một nguồn phổ biến của lỗi. Lý do là các phương thức đó sẽ sử dụng ngôn ngữ hiện tại trên thiết bị của người dùng và ngay cả khi mã có vẻ hoạt động chính xác khi bạn phát triển ứng dụng, nó sẽ bị lỗi ở một số ngôn ngữ. Ví dụ: bằng ngôn ngữ Thổ Nhĩ Kỳ, thay thế chữ hoa cho i không phải là I.

Nếu bạn muốn phương pháp thay thế ASCII, ví dụ: để đổi tên enum, hãy gọi String#toUpperCase(Locale.US). Nếu bạn thực sự muốn sử dụng ngôn ngữ hiện tại, hãy gọi String#toUpperCase(Locale.getDefault()) để thay thế.

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