6

私のアプリでは、 を使用してユーザーのデフォルト ロケールを取得しLocale.getDefault()、それを に渡しますCurrency.getInstance(Locale)IllegalArgumentExceptionほとんどの場合は機能しますが、スタック トレースに次のようなレポートをユーザーから受け取り始めました。

原因: java.lang.IllegalArgumentException: サポートされていない ISO 3166 国: en_UK at java.util.Currency.getInstance(Currency.java:81) at org.

Android は有効なロケールのみを返すと思っていましたが、そうではないようです。

このような場合、有効な ISO 3166 ロケールのみを取得するにはどうすればよいですか? この特別なケースを処理するのが簡単な方法ですが、一般的な解決策があればそれを使用したいと思います。

誰でもこれを経験したことがありますか?ありがとう。

4

4 に答える 4

10

英国のISO31662文字の略語はではなくUK、正しいIDはGBです。 UK互換性の理由(過去に行われた間違い)のためにあります。

私は他の例外を探しましたが、何も見つかりませんでした。そのため、今のところ、私は特別な場合を処理します。

Locale loc = new Locale("en","UK"); // test code

if(loc.getCountry().equals("UK")){
    loc = new Locale(loc.getLanguage(), "GB");
    }
Currency cur = Currency.getInstance(loc);
于 2012-11-10T12:18:25.320 に答える