Android ADT 21.0警告:隐式使用默认语言环境

时间:2012-11-18 21:02:40

标签: android adt

我已将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"))

但错误仍然存​​在!如何解决这个问题?

7 个答案:

答案 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)

清理项目对我不起作用,所以我在代码中添加了默认语言环境:

NOT NULL

根据您的项目,您可能需要查看Locale说明。

答案 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")