簡體   English   中英

為什么我的Android應用程序中出現IllegalArgumentException?

[英]Why am I getting a IllegalArgumentException in my Android App?

我正在開發一個Android應用程序,而我卻得到了最煩人的NFE,這似乎是沒有理由的。

所以,這就是我的應用程序中的內容:

int amount = 7;
NumberFormat myNumberFormat = NumberFormat.getCurrencyInstance(Locale.US);
TextView money = (TextView)findViewById(R.id.money_view);
money.setText(myNumberFormat.format(amount));

出於某種原因,當我嘗試獲取NumberFormat貨幣實例時,我得到了NFE。 作為測試,為確保我不會發瘋,我還編寫了以下獨立文件:

import java.util.Locale;
import java.text.NumberFormat;

public class NFETest {
    public static void main(String[] args){
        int amount = 7;
        NumberFormat myNumberFormat = NumberFormat.getCurrencyInstance(Locale.US);
        System.out.println(myNumberFormat.format(amount));
    }
}

獨立運行沒有問題。 那么,是什么給...為什么我會收到此錯誤?

編輯:

再往下看LogCat,看起來它是一個IllegalArgumentException而不是NFE。 但是,這並不奇怪。 我設置了“ Locale.US”,所以應該沒有任何區別。 但是,一些快速瀏覽谷歌的人可能認為我的平板電腦不在美國。 這可能是硬件問題,而不是軟件問題。

只需使用包裝器(整數,浮點數,雙精度,BigDecimal或其他)即可:

public static void main(String[] args){
    Integer amount = 7;
    NumberFormat myNumberFormat = NumberFormat.getCurrencyInstance(Locale.US);
    System.out.println(myNumberFormat.format(amount));

    int amount2 = 11;
    System.out.println(myNumberFormat.format(Integer.valueOf(amount2)));
}

在其他解決方案中,您可以使用Integer.valueOf(..)如下所示: http : //ideone.com/0ZKsS3但您的示例也可以使用。 看看在線編譯器: http : //ideone.com/0ZKsS3

使用此代碼

int amount = 7;
NumberFormat myNumberFormat = NumberFormat.getCurrencyInstance(Locale.US);
TextView money = (TextView)findViewById(R.id.money_view);
money.setText(String.valueOf(myNumberFormat.format(amount)));
try {
  int amount = 7;
  NumberFormat myNumberFormat = NumberFormat.getCurrencyInstance(Locale.US);
  TextView money = (TextView)findViewById(R.id.money_view);
  money.setText(String.valueOf(myNumberFormat.format(amount)));// your error is here.
    //go on as normal
} catch (NumberFormatException e) {
    //handle error
}

您應該捕獲異常並相應地處理解析錯誤。

或者您應該嘗試使用其他值:

    double num = 1323.526;

    NumberFormat defaultFormat = NumberFormat.getCurrencyInstance();
    System.out.println("US: " + defaultFormat.format(num));

    Locale swedish = new Locale("sv", "SE");
    NumberFormat swedishFormat = NumberFormat.getCurrencyInstance(swedish);
    System.out.println("Swedish: " + swedishFormat.format(num));

輸出:

美國:1,323.53美元

瑞典語:1 323,53 kr

希望這次可以幫助您解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM