70

我已将 ADT 更新到 v. 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"))

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

4

7 回答 7

115

Locale.getDefault()如果你不能确定你的文本总是用英文,你应该特别使用。此外,在您再次运行 lint 或清理项目后,您通常会遇到类似的 lint 错误。

于 2012-11-18T21:25:30.933 回答
33

您只需要通过单击来清理您的项目:

Build > Clean Project或者Build > Rebuild Project

于 2012-11-20T10:37:10.253 回答
6

实际上,Locale.getDefault()当目标是向用户呈现文本时使用。但是,这是 Lint 检查的重点,您可能应该Locale.US在目标是机器可读性/使用时使用。Locale.getDefault()因为如果您不指定一个,它已经隐式使用,并且当设备指定了自己的默认语言环境时,这可能会导致难以发现错误。正如其他人所建议的那样,您似乎还需要以任何一种方式清理您的项目。

于 2013-03-08T19:12:01.930 回答
3

使用 Locale.getDefault() 而不是清理你的项目。

于 2013-03-04T06:45:30.053 回答
2

这可能是一个 Lint 错误。试着剪掉整行代码

if (e.getMessage().toLowerCase(Locale.ENGLISH).contains("blabla"))

保存,然后粘贴。

于 2014-05-08T21:29:37.100 回答
2

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

String.format(Locale.getDefault(), "firstname: %s, lastname: %s", firstName, lastName));

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

于 2016-07-19T17:03:05.860 回答
0

正如在明确使用 Locale.US 时,为什么 Android Lint 会警告使用默认语言环境的 String.format?当我调用 String#toLowerCase 时应该指定哪个语言环境?某些语言(如土耳其语)有不同的大小写转换规则(“I”和“i”字符不进行大小写转换)。

我想,这是 Lint 规则的错误。设置Locale.getDefault()是一个不错的选择。要删除警告,请添加 before 方法:

@SuppressLint("DefaultLocale") 
于 2021-02-02T09:27:23.623 回答