Android Activity NullPointerException (невозможно создать экземпляр активности ComponentInfo)?

Я пытаюсь создать программу для Android, которая будет читать текст, а затем распечатывать его, просто чтобы привыкнуть к использованию ввода-вывода для Android. Однако всякий раз, когда я запускаю его на AVD, он возвращает ошибку в LogCat, говорящую о том, что в моем коде есть исключение NullPointerException, и поэтому он «не может создать экземпляр активности ComponentInfo».

Я не могу найти, где я имею в виду что-то нулевое.

Вот мой код:

import android.app.*;
import android.os.*;
import android.view.View;
import android.view.View.*;
import android.widget.*;



 public class ButtonTestActivity extends Activity {

TextView tv = (TextView) findViewById(R.id.textView1);
EditText et = (EditText) findViewById(R.id.edittext);

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    Button b = (Button) findViewById(R.id.Enter);

    b.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            tv.setText(et.getText().toString());
        }
    });

}

}

Вот мой XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"  >
<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello" />

<Button
    android:id="@+id/Enter"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

<EditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

 </LinearLayout>

Кто-нибудь знает, что может быть причиной этого? Большое спасибо.


person Zeldarulah    schedule 02.03.2012    source источник
comment
Я не вижу ничего явно плохого. Можете ли вы вставить трассировку исключения из LogCat   -  person Sid    schedule 02.03.2012


Ответы (5)


Вам нужно создавать экземпляры ваших представлений внутри onCreate, и после setContentView Activity не знает, какие представления вы имеете в виду, пока вы не установите макет Activity с помощью метода setContentView. Если это не решит проблему, было бы полезно опубликовать трассировку стека из LogCat, чтобы был известен точный номер строки.

@Override

public void onCreate(Bundle savedInstanceState) {


super.onCreate(savedInstanceState);
setContentView(R.layout.main);


TextView tv = (TextView) findViewById(R.id.textView1);
EditText et = (EditText) findViewById(R.id.edittext);

Button b = (Button) findViewById(R.id.Enter);

b.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        tv.setText(et.getText().toString());
    }
});

}
person mmaitlen    schedule 02.03.2012
comment
tv и et не обязательно должны быть локальными переменными. - person Robert; 02.03.2012
comment
Это, скорее всего, решит вашу проблему. У меня была похожая проблема, когда я начал разрабатывать для Android. Попробуйте это, и это сработает. - person Brandon Wilson; 02.03.2012
comment
Ах, у меня изначально были TextView и EditText там, где они есть у вас, но это вызвало ошибки, потому что они не были окончательными. Теперь, когда я сделал это окончательно и вернул их, это работает. Благодарю вас! - person Zeldarulah; 05.03.2012
comment
Означает ли это, что мы не можем использовать представления в качестве глобальных переменных? - person Pritt Balagopal; 23.05.2018

Я предполагаю, что проблема вызвана двумя полями tv и et, которые вы инициализируете непосредственно при создании экземпляра класса.

Вы должны перенести инициализацию обоих полей в метод onCreate, как вы сделали это с помощью «Кнопки b».

person Robert    schedule 02.03.2012

Перед настройкой содержимого вы пытаетесь создать экземпляр textview и EditText, поэтому у вас есть исключение нулевого указателя
Спасибо.

person deepak Sharma    schedule 02.03.2012

Исключение нулевого указателя означает, что вы ссылаетесь на что-то, что еще не создано.
setContentView создает необходимые поля с помощью переменных tv и et.
Итак, вам нужно иметь tv и et после< /strong> setContentView.

person user3599338    schedule 03.05.2014

да, помимо приведенных выше ответов, я даю эту ошибку, потому что определяю переменную перед методом onCreate:

boolean in = true;

@Override
protected void onCreate .......
person Arne Sowieso    schedule 18.12.2016