Android spinner сбой при открытии раскрывающегося списка или макета устроен странно с бессмысленным добавленным пробелом [дубликат]

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.

При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».

Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this. Возьмем этот пример:

public class Some {
    private int id;
    public int getId(){
        return this.id;
    }
    public setId( int newId ) {
        this.id = newId;
    }
}

И в другом месте вашего кода:

Some reference = new Some();    // Point to a new object of type Some()
Some otherReference = null;     // Initiallly this points to NULL

reference.setId( 1 );           // Execute setId method, now private var id is 1

System.out.println( reference.getId() ); // Prints 1 to the console

otherReference = reference      // Now they both point to the only object.

reference = null;               // "reference" now point to null.

// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );

// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...

Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

110
задан Peter O. 22 August 2014 в 16:54
поделиться

4 ответа

Изменить

dateTime.setText(app.getTotalDl());

To

dateTime.setText(String.valueOf(app.getTotalDl()));

Существуют разные версии setText - один берет строку и принимает идентификатор ресурса int. Если вы передадите ему целое число, оно попытается найти соответствующий идентификатор строкового ресурса, который он не может найти, что является вашей ошибкой.

Я думаю, app.getTotalDl() возвращает int. Вы должны указать setText, чтобы установить его в значение String этого int.

setText (int resid) vs setText (текст CharSequence)

379
ответ дан Ahmad 20 August 2018 в 10:49
поделиться
  • 1
    setText (int resId) даже не содержит javadoc. Они действительно должны были дать это отдельное имя - очевидно, это распространенное злоупотребление здесь. Итак, задание resId устанавливает текст TextView как текст другого ресурса? – Stealth Rabbi 19 February 2016 в 16:45

Оцененное значение для settext было целым, поэтому он перешел к подключенному к нему ресурсу, но он не был найден, вы хотели установить текст так, чтобы он был строковым, чтобы преобразовать целое число в строку, добавив .toStringe или String.valueOf(int) решит вашу проблему!

0
ответ дан blackHawk 20 August 2018 в 10:49
поделиться

Когда вы пытаетесь установить текст в Edittext или textview, вы должны передать только строковый формат.

dateTime.setText(app.getTotalDl());

-

dateTime.setText(String.valueOf(app.getTotalDl()));
0
ответ дан maxshuty 20 August 2018 в 10:49
поделиться

Заменить

dateTime.setText(app.getTotalDl());

С

dateTime.setText(""+app.getTotalDl());
8
ответ дан Tunaki 20 August 2018 в 10:49
поделиться
  • 1
    Это работа, но я думаю, что это не подходит. Ответ @KenWolf правильный и профессиональный. – amin 29 July 2017 в 06:55
Другие вопросы по тегам:

Похожие вопросы: