Как правильно вывести текст на экран в android?
Учусь разрабатывать приложения на Java. Скажем так, моё приложение должно выводить число на экран. Для этого на экране был создан объект, в коде ему присваивалось значение переменной. По началу я не лез никуда, кроме GameActivity.java(код для acrivity_game.xml, которое я создал), и данные действия там проделывались следующим образом:
TextView textObjectPartA;
TextView textObjectPartB;
TextView textObjectPartA = (TextView)findViewById(R.id.textPartA);
TextView textObjectPartB = (TextView)findViewById(R.id.textPartB);
int partA = randInt.nextInt(numberRange);
partA++;
int partB = randInt.nextInt(numberRange);
partB++;
textObjectPartA.setText(""+partA);
textObjectPartB.setText(""+partB);
При запуске приложения и открытия, отладчик выдавал такую ошибку
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
Я смотрел обсуждение проблемы вот здесь, и делал, как указано в ответе:
Файл strings.xml
<string name="part_a">part a value = %1$d.</string>
<string name="part_b">part b value = %1$d.</string>
Файл activity_game.xml
<TextView
android:id="@+id/textPartB"
android:text="@string/part_b"
...
<TextView
android:id="@+id/textPartA"
android:text="@string/part_a"
GameActivity.java
Resources res = getResources();
String partA_text = String.format(res.getString(R.string.part_a), partA);
textObjectPartA.setText(partA_text);
String partB_text = String.format(res.getString(R.string.part_b), partB);
textObjectPartB.setText(partB_text);
Также я пробовал простое решение - просто написать
textObjectPartA.setText(String.valueOf(partA));
textObjectPartB.setText(String.valueOf(partB));
Данная ошибка не исчезает. Программа также вылетает при попытке загрузить это Activity. Что я делаю не так?
Ответы (1 шт):
После ознакомления с репой ТС стало понятно в чем проблема. Попробуйте использовать такой пример присваивания значение виджету :
public TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
textView = (TextView) view.findViewById(R.id.textView1);
}
Вы объявили один глобальный виджет в классе, а присвоили значение локальному. То есть у вас программа не понимает что это за виджеты:
TextView textObjectPartA;
TextView textObjectPartB;
в onCreate() уберите слово TextView:
textObjectPartA = (TextView)findViewById(R.id.textPartA);
textObjectPartB = (TextView)findViewById(R.id.textPartB);
и присвойте значение виджетам так как вы это сделали здесь:
textObjectScore = (TextView)findViewById(R.id.textScore);
textObjectLevel = (TextView)findViewById(R.id.textLevel);
и дальше вы сможете работать с глобальными виджетами из любого места в классе. И вероятнее всего ошибка исчезнет :)