ListView 中的 java.lang.NullPointerException 问题

Posted

技术标签:

【中文标题】ListView 中的 java.lang.NullPointerException 问题【英文标题】:java.lang.NullPointerException problem in ListView 【发布时间】:2020-10-08 14:24:08 【问题描述】:

我是 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

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

我尝试使用条件来“捕获”错误所说的空值,但到目前为止没有任何效果。

【问题讨论】:

【参考方案1】:

在您指出问题的地方修改您的代码并在那里添加 Null 检查。下面我已经提到了代码示例。

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

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

这里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);

    ...

【讨论】:

嗨,布拉姆,当我尝试它时,它似乎不起作用。可以举个例子吗? 嗯,看起来您的列表中有 Expense 对象或其他东西(我无法从代码中看出)。在类内部初始化 expenseAmount 属性以保存默认值,例如“0”或其他内容。 感谢您的评论,布拉姆。我已经修复了解决方案。如果您愿意,可以查看我的解决方案的其他评论。

以上是关于ListView 中的 java.lang.NullPointerException 问题的主要内容,如果未能解决你的问题,请参考以下文章

Myeclipse如何自动创建hibernate 转载

Kotlin vararg:如何将 null 设置为不抛出 NullPointerException 的 vararg?

如何获取listview的item中的内容

Flutter - 另一个 Listview 中的 Listview.builder

动态设置Listview高度后正确检测Listview中的setOnScrollListener

listview点击item中的button改变item中的其它的控件的值