NullPointerException в методе onCreate () при обработке события - PullRequest
0 голосов
/ 08 марта 2012

Я создал новый проект Android (для Android 2.3.3) с помощью Eclipse и изменил файл main.xml в папке res/layout следующим образом.

<?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"
    android:gravity="center" >

    <Button android:id="@+id/button01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/button01_name" />

</LinearLayout>

Файл strings.xml в папке res/values выглядит следующим образом.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">ButtonClickDemo3</string>
    <string name="button01_name">Press this button!</string>

</resources>

Наконец, вот onCreate() метод одного Activity проекта.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Button button01 = (Button) findViewById(R.id.button01);
    button01.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast toast = Toast.makeText(v.getContext(), "The button was pressed!", Toast.LENGTH_SHORT);
            toast.show();
        }
    });

    setContentView(R.layout.main);

}

Когда я запускаю это простое приложение, исключение NullPointerException выдается на button01.setOnClickListener(...). Действительно, если я переместу инструкцию setContentView(R.layout.main);, написав ее перед созданием кнопки, то есть

...

setContentView(R.layout.main);

Button button01 = (Button) findViewById(R.id.button01);
button01.setOnClickListener(...);

...

приложение успешно работает. Почему?

Ответы [ 3 ]

3 голосов
/ 08 марта 2012

Сначала нужно установить contentView, в противном случае, как вы ожидаете findViewById, чтобы найти представления. Вот почему вы получаете нулевой указатель. button01 - это вид на R.layout.main, поэтому вы должны установить contentView first

1 голос
/ 08 марта 2012

Это потому, что ваша активность во время определения кнопки не знает, в каком макете она должна искать id / button01

0 голосов
/ 08 марта 2012

setContentView(R.Layout.main) отсутствует в вашем onCreate() методе

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...