gpt4 book ai didi

java - Locale.getDefault() 为 Currency.getInstance 返回不受支持/无效的区域设置

转载 作者:太空宇宙 更新时间:2023-11-03 10:19:36 24 4
gpt4 key购买 nike

我的应用使用以下代码获取本地货币:

Locale locale = Locale.getDefault()
java.util.Currency localCurrency = java.util.Currency.getInstance(locale);

这在我的所有测试中都运行良好,以前从来没有出现过问题。今天我在 Google Play Developer Console 中看到了一个 CrashLog:应用程序崩溃了:

java.lang.IllegalArgumentException: Unsupported ISO 3166 country: es

当使用 new Locale("es") 而不是 Locale.getDefault() 时,我可以很容易地重现此错误:

Locale locale = new Locale("es");
java.util.Currency localCurrency = java.util.Currency.getInstance(locale);

实际上无论我使用什么语言代码都会抛出相同的异常,例如“en”、“de”、“fr”等。只有在还指定了国家/地区代码时,一切才能正常工作,例如新语言环境("es", "ES")

我有两个异常问题:

<强>1。为什么“es”不是有效的语言环境?据我了解,语言环境名称由语言代码(小写)和可选国家/地区代码组成。因此 es-ES 将是一个有效的语言环境,但“es”也应该是,不是吗?

<强>2。我能做些什么来避免这个问题?我在整个应用程序中使用 Locale.getDefault() 来为用户提供区域设置货币、区域设置数字格式等。我假设系统总是返回一个有效的 Locale 但显然不是这种情况。我如何确定使用了有效的语言环境?

最佳答案

我也遇到过这个问题,感觉目前的回答不完整。当您在 Firebase 虚拟机上运行时会弹出此问题(您也可以通过选择相应的语言区域设置在您的模拟器上执行此操作,即 en、de、es 等)。

我通过创建一个自定义类来解决这个问题,该类使用尝试检索失败的货币会计:

public static Locale getLocalCurrency() {
try {
return Currency.getInstance(Locale.getDefault());
} catch (NullPointerException | IllegalArgumentException ex) {
return Currency.getInstance(new Locale("en", "US"));
}
}

这基本上假设如果失败它将返回美国的语言环境。这可以很容易地扩展以检测语言,即 es,并返回相关的默认值。

我已将此扩展到我使用 Locale 以确保安全的所有点。

希望对看到这里的其他人有所帮助。

关于java - Locale.getDefault() 为 Currency.getInstance 返回不受支持/无效的区域设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26376439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com