java.lang.NullPointerException problem in ListView



我是Android开发的新手,我正在尝试将字符串转换为双精度,然后将其四舍五入到小数点后2位,然后将其转换回字符串以显示在ListView中。这是我的代码:

public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent){
String expenseCategory = getItem(position).getExpenseCategory();
String expenseAmount = getItem(position).getExpenseAmount();
String expenseEntryDate = getItem(position).getExpenseTodayEntry();
Double eA = Double.parseDouble(expenseAmount);
String eAnew = String.format("%.2f",eA);
Expenses ex = new Expenses(eAnew, expenseCategory, expenseEntryDate);
LayoutInflater inflater = LayoutInflater.from(mContext);
convertView = inflater.inflate(mResource, parent, false);
TextView expenseCategoryTextView = (TextView) convertView.findViewById(R.id.CategoryHistoryTV);
TextView expenseDateEntryTextView = (TextView) convertView.findViewById(R.id.DateHistoryTV);
TextView expenseAmountTextView = (TextView) convertView.findViewById(R.id.AmountHistoryTV);
expenseCategoryTextView.setText(expenseCategory);
expenseDateEntryTextView.setText(expenseEntryDate);
expenseAmountTextView.setText(eAnew);
expenseCategoryTextView.setTextColor(Color.RED);
expenseDateEntryTextView.setTextColor(Color.RED);
expenseAmountTextView.setTextColor(Color.RED);
return convertView;
}

这是错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.String.trim()' on a null object reference

它可以正常运行,无需:

Double eA = Double.parseDouble(expenseAmount);
String eAnew = String.format("%.2f",eA);

但相反,它给了我一个输出,比如

1000.0000

我知道这可能是糟糕的设计,但是由于各种原因,将费用金额声明为双倍在我的代码的其他领域不起作用。

我试图使用一个条件来"捕获"空值,因为错误说,但到目前为止没有任何效果。

在指出问题的位置修改代码,并在那里添加 Null 检查。下面我提到了代码示例。

String eAnew = "00.00";
if(expenseAmount != null && !"null".equals(expenseAmount)){
Double eA = Double.parseDouble(expenseAmount);
eAnew = String.format("%.2f",eA);
}

首先,您尚未发布完整的代码,其中您正在从双精度转换为字符串,反之亦然,其次根据错误"java.lang.String java.lang.String.trim((",这意味着您的字符串为空,您正在调用 trim 函数。因此,在调用此函数 trim 之前,请确保该字符串必须具有一些值。

似乎expenseAmount在这里是空的。尝试为列表中的项目指定默认expenseAmount值或处理null情况。

喜欢:

public class Expense { // whatever your class is
private String expenseAmount = "0"; // set a default value, so it's not null
...
}

或:

public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
...
String expenseAmount = getItem(position).getExpenseAmount();
...
String eAnew;
if (expenseAmount == null) {
eAnew = "I don't have an expenseAmount yet!"; // handle the null case
else {
Double eA = Double.parseDouble(expenseAmount);
eAnew = String.format("%.2f", eA);
}
Expenses ex = new Expenses(eAnew, expenseCategory, expenseEntryDate);
...
}

最新更新