#android #nullpointerexception #runtime-error
#Android #исключение nullpointerexception #ошибка во время выполнения
Вопрос:
я пытаюсь изучить Android и выполняю простое упражнение, включающее две кнопки и текстовое представление. Однако, когда я пытаюсь запустить приложение в эмуляторе, приложение принудительно завершает работу.
Ниже приведен код:
public class CambiarColorActivity extends Activity
implements View.OnClickListener {
Button btnRed;
Button btnBlue;
TextView text;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
TextView text = (TextView)findViewById(R.id.textView1);
btnRed=(Button)findViewById(R.id.button1);
btnBlue=(Button)findViewById(R.id.button2);
btnRed.setOnClickListener(this);
btnBlue.setOnClickListener(this);
}
public void onClick(View view) {
changeColor();
}
private void changeColor() {
if(btnRed.isPressed()) {
text.setBackgroundResource(Color.RED);
} else {
text.setBackgroundResource(Color.BLUE);
}
}
}
И это ошибки, которые я обнаружил в журнале в Eclipse:
11-04 11:34:42.377: E/AndroidRuntime(376): Caused by: java.lang.NullPointerException
11-04 11:34:42.377: E/AndroidRuntime(376): at mi.entrenamiento.OrejanoX.CambiarColorActivity.onCreate(CambiarColorActivity.java:25)
Вот моя часть моего main.xml
<LinearLayout
android:id="@ id/linearLayout1"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<Button
android:id="@ id/button1"
style="@style/red"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableLeft="@drawable/red"
android:text="@string/red" />
<Button
android:id="@ id/button2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:drawableLeft="@drawable/blue"
android:text="@string/azul" />
</LinearLayout>
Любая помощь будет приветствоваться.
Спасибо и с уважением, Мауро.
Ответ №1:
Поскольку ошибка
11-04 11:34:42.377: E / AndroidRuntime(376): Вызвано: java.lang.Исключение NullPointerException 11-04 11:34:42.377: E / AndroidRuntime(376): в mi.entrenamiento.OrejanoX.CambiarColorActivity.onCreate(CambiarColorActivity.java:25)
поэтому, пожалуйста, посмотрите, что находится в строке 25 вашего файла.
Я думаю, это одна из следующих строк.
btnRed.setOnClickListener(this);
btnBlue.setOnClickListener(this);
поэтому, пожалуйста, проверьте в своем main.xml независимо от того, установили ли вы android:id для двух кнопок.
Комментарии:
1. У меня есть andoird: id для кнопок teo. Проверьте исходное сообщение для получения новой информации.
2. Кажется, что вы получаете ошибку в,
changeColor()
потому что вonCreate()
вы пишетеTextView text = (TextView)findViewById(R.id.textView1);
, поэтому текст является локальной переменной вonCreate()
, а не переменной экземпляра. Также обратите внимание, чтоsetBackgroundResource()
принимает параметр в качестве идентификатора ресурса, поэтому здесь будет ошибка. Вы должны написатьtext.setBackgroundColor(Color.RED)
Ответ №2:
В нем говорится, что вы получаете исключение NullPointerException. Я думаю, это потому, что на btnRed
или btnBlue
были нулевыми. Проверьте и посмотрите, получаете ли вы действительное значение от findViewById
.
Комментарии:
1. Я добавил main.xml к исходному сообщению. Я получаю нулевое значение, но могу понять, почему.
2. Для этого есть несколько причин; Google «findViewById возвращает null», и я уверен, что вы найдете некоторые.
Ответ №3:
Я обнаружил ошибку, это была эта строка на main.xml
style="@style/red"
Я удалил, и все было в порядке.