![](/img/trans.png)
[英]Why am I getting this error java.lang.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.