我正在开发一个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"设置,所以不应该有任何区别。然而,一些快速的谷歌搜索说,可能是我的平板电脑认为它不在美国。它可能是硬件问题,而不是软件。
答案 0 :(得分:0)
只需使用包装器(Integer,Float,Double,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
答案 1 :(得分:0)
使用此代码
int amount = 7;
NumberFormat myNumberFormat = NumberFormat.getCurrencyInstance(Locale.US);
TextView money = (TextView)findViewById(R.id.money_view);
money.setText(String.valueOf(myNumberFormat.format(amount)));
答案 2 :(得分:0)
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
希望这次能帮助你解决问题。