java Проблема с .lang.NullPointerException в ListView - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в разработке Android и пытаюсь преобразовать строку в двойную, затем округлить до двух десятичных знаков, а затем преобразовать обратно в строку для отображения в 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

Я понимаю, что это может быть плохой дизайн, однако объявление параметра costAmount как double не работает в других областях моего кода по разным причинам.

Я пытался использовать условие "поймать" нулевое значение, как указано в ошибке, но пока ничего не работает.

Ответы [ 3 ]

1 голос
/ 18 июня 2020

Измените код, в котором вы указали проблему, и добавьте туда проверку Null. Ниже я упомянул пример кода.

String eAnew = "00.00";
        if(expenseAmount != null && !"null".equals(expenseAmount)){
            Double eA = Double.parseDouble(expenseAmount);
            eAnew = String.format("%.2f",eA);
        }
0 голосов
/ 18 июня 2020

Кажется, что 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);

    ...
}
0 голосов
/ 18 июня 2020

Во-первых, вы не опубликовали свой полный код, в котором вы выполняете преобразование из double в строку и наоборот, и во-вторых, в соответствии с ошибкой 'java .lang.String java .lang.String.trim () 'это означает, что ваша строка равна нулю, для которой вы вызываете функцию обрезки. Поэтому убедитесь, что эта строка должна иметь какое-то значение перед вызовом этой функции обрезки.

...