Мое приложение продолжает сбой при открытии на эмуляторе или телефоне Android

#java #android

#java #Android

Вопрос:

 package com.ebonybutler.cexample3;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo; 
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

    Button b = (Button) findViewById(R.id.button1);
    b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            startActivity(new Intent(Main.this, Second.class));

        }
    });
}

}
  

Каждый раз, когда я пытаюсь запустить его, ошибка

«Извините! приложение example3 (processcom.ebonybutler.cexample3) неожиданно остановилось. Пожалуйста, попробуйте еще раз. ‘

Я не могу понять, что приводит к сбою при запуске, потому что все файлы Java выглядят нормально или, по крайней мере, не содержат ошибок. Пожалуйста, помогите! Я добавил информацию из моего logcat ниже, но я пытаюсь интерпретировать то, что он мне говорит.

 11-02 09:29:10.261: E/AndroidRuntime(276): FATAL EXCEPTION: main
11-02 09:29:10.261: E/AndroidRuntime(276): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ebonybutler.cexample3/com.ebonybutler.cexample3.Main}: java.lang.NullPointerException
11-02 09:29:10.261: E/AndroidRuntime(276):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
11-02 09:29:10.261: E/AndroidRuntime(276):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-02 09:29:10.261: E/AndroidRuntime(276):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-02 09:29:10.261: E/AndroidRuntime(276):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-02 09:29:10.261: E/AndroidRuntime(276):  at android.os.Handler.dispatchMessage(Handler.java:99)
11-02 09:29:10.261: E/AndroidRuntime(276):  at android.os.Looper.loop(Looper.java:123)
11-02 09:29:10.261: E/AndroidRuntime(276):  at android.app.ActivityThread.main(ActivityThread.java:4627)
11-02 09:29:10.261: E/AndroidRuntime(276):  at java.lang.reflect.Method.invokeNative(Native Method)
11-02 09:29:10.261: E/AndroidRuntime(276):  at java.lang.reflect.Method.invoke(Method.java:521)
11-02 09:29:10.261: E/AndroidRuntime(276):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
11-02 09:29:10.261: E/AndroidRuntime(276):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
11-02 09:29:10.261: E/AndroidRuntime(276):  at dalvik.system.NativeStart.main(Native Method)
11-02 09:29:10.261: E/AndroidRuntime(276): Caused by: java.lang.NullPointerException
11-02 09:29:10.261: E/AndroidRuntime(276):  at com.ebonybutler.cexample3.Main.onCreate(Main.java:21)
11-02 09:29:10.261: E/AndroidRuntime(276):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-02 09:29:10.261: E/AndroidRuntime(276):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-02 09:29:10.261: E/AndroidRuntime(276):  ... 11 more
  

Ответ №1:

Похоже, у вас проблема с нулевым указателем — на Main.java , строка 21.

Комментарии:

1. если вы не можете определить, что вызывает это в этой строке, опубликуйте содержимое метода, и вы, вероятно, получите помощь.

2. Спасибо за вашу помощь, брошб. Я вернулся и опубликовал main.java код в моем оригинальном посте выше.

Ответ №2:

По моим подсчетам, это происходит, когда вы устанавливаете прослушиватель для своей кнопки. Вы уверены, что у этой кнопки все еще есть ИДЕНТИФИКАТОР button1 в XML-файле вашего макета? Эта ошибка возникла бы, если бы этот идентификатор больше не существовал в вашем макете

 Button b = (Button) findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener() { ... // <-- probably occurring here
  

Редактировать

итак, в терминах кода, это то, что я говорю. Я говорю, что, возможно, у вас была кнопка в вашем main.xml файл с идентификатором «button1». (см. Ниже)

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
    >
    <LinearLayout 
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <Button android:id="@ id/button1 android:layout_height="wrap_content" android:layout_width="wrap_content" ...></Button>
  

но, возможно, теперь вы, возможно, изменили идентификатор в макете xml и не изменили свой код (см. «newid» ниже)

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
    >
    <LinearLayout 
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
        <Button android:id="@ id/newid" android:layout_height="wrap_content" android:layout_width="wrap_content" ...></Button>
  

В этом случае findViewById вернет значение null, поскольку в вашем main.xml файла больше нет.

Комментарии:

1. Обычно тут же я получаю автоматическое переопределение. Разве это не так? Что должно быть вместо этого? У меня никогда не было проблем с этим раньше или ни в одном из моих других файлов Java. Спасибо за вашу помощь mjmarsh.

2. Спасибо за вашу помощь, mjmarsh! Это, казалось, помогло! Он снова запускается как на эмуляторе, так и на телефоне.

Ответ №3:

У вас есть исключение NullPointerException в вашем методе onCreate (строка 21). Распространенной ошибкой часто является получение указателя на представление через findViewById перед фактической настройкой макета. Может ли это быть вашей проблемой? Если вы не можете решить проблему, опубликуйте содержимое вашего метода onCreate (вкл. номера строк).

Комментарии:

1. Я относительно новичок в создании приложений и использовании Java в целом, поэтому, пожалуйста, потерпите меня. Вы знаете, как я мог бы решить эту проблему. Поскольку вы упомянули эту строку из моего Main.java файл, я добавлю код каким-нибудь образом.