我已将ADT更新为第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"))
但错误仍然存在!如何解决这个问题?
答案 0 :(得分:105)
您应该使用Locale.getDefault()
,尤其是如果您无法确定您的文字将始终使用英文。
另外,在您再次运行lint或清理项目后,您所拥有的lint错误通常会消失。
答案 1 :(得分:31)
您只需清理项目
答案 2 :(得分:5)
实际上,当目标是向用户呈现文本时,请使用Locale.getDefault()
。但是,这是Lint检查的重点,只要目标是机器可读性/使用,您应该使用Locale.US
。因为如果您没有指定一个,它已经隐式使用Locale.getDefault()
,并且当设备指定了自己的默认语言环境时,这可能导致很难找到错误。您似乎也需要像其他人一样建议清理您的项目。
答案 3 :(得分:3)
使用Locale.getDefault(),然后清理项目。
答案 4 :(得分:1)
这可能是一个Lint bug。试着剪掉整行代码
if (e.getMessage().toLowerCase(Locale.ENGLISH).contains("blabla"))
保存,然后粘贴。
答案 5 :(得分:1)
答案 6 :(得分:0)
如用 Why does Android Lint warn about String.format using default locale when explicitly using Locale.US? 和 Which Locale should I specify when I call String#toLowerCase? 编写的那样,某些语言(如土耳其语)具有不同的大小写转换规则(“I”和“i”字符不会相互转换大小写)。
我想,这是 Lint 规则的一个错误。设置 Locale.getDefault()
是一个不错的选择。要删除警告,请添加 before 方法:
@SuppressLint("DefaultLocale")