Нужна помощь с проблемой Android NullPointer

1

Я сейчас делаю игру, и я наткнулся на эту неприятную проблему. Пробовал это, но пока не повезло. У меня есть класс, определенный в его собственном файле (код здесь не из моей игры, а упрощенный с теми же ошибками):

package graf.grafika;

public class MyClass {
    int number;
}

И проблема в myMethod (приложение неожиданно останавливается):

public class aktivnost extends Activity {
    MyClass[] myclass = new MyClass[5];

    void myMethod()
    {
        //Error
        myclass[0].number = 1;
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        myMethod();
        setContentView(new Panel(this));
    }
...other required methods
}

Logcat:

07-02 10:01:13.507: ERROR/AndroidRuntime(3203): FATAL EXCEPTION: main
07-02 10:01:13.507: ERROR/AndroidRuntime(3203): java.lang.RuntimeException: Unable to start activity ComponentInfo{graf.grafika/graf.grafika.aktivnost}: java.lang.NullPointerException
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread.access$1500(ActivityThread.java:123)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.os.Looper.loop(Looper.java:126)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread.main(ActivityThread.java:3997)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at java.lang.reflect.Method.invokeNative(Native Method)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at java.lang.reflect.Method.invoke(Method.java:491)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at dalvik.system.NativeStart.main(Native Method)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203): Caused by: java.lang.NullPointerException
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at graf.grafika.aktivnost.myMethod(aktivnost.java:17)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at graf.grafika.aktivnost.onCreate(aktivnost.java:23)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
07-02 10:01:13.507: ERROR/AndroidRuntime(3203):     ... 11 more

Может кто-нибудь, пожалуйста, помогите мне исправить это? Я новичок в программировании java.

Теги:
class
methods
nullpointerexception

3 ответа

0
Лучший ответ

myclass[0] имеет значение null, поскольку он не указывает на какой-либо объект. Вот почему вы получаете нулевой указатель. Вы должны сделать myclass[0] = new MyClass();

public class aktivnost extends Activity {
    MyClass[] myclass = new MyClass[5];

    void myMethod()
    {
        //Error
        myclass[0] = new MyClass(); 
        myclass[0].number = 1;
    }

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        myMethod();
        setContentView(new Panel(this));
    }
...other required methods
}
  • 0
    Я не могу заставить работать синтаксис ... Я использую затмение. Не могли бы вы правильно переписать класс активности в комментариях? Я знаю, это звучит глупо, но я очень плохо знаком с Java.
  • 0
    @Schultzika - Конечно. Смотри мое редактирование :)
Показать ещё 2 комментария
1

Чтобы на самом деле добавить в свой массив 5 новых классов:

MyClass[] myclass = new MyClass[5];
for(int i = 0; i < 5; i++)
{
myclass[i] = new MyClass();
}
0

MyClass [] myclass= new MyClass [5]; означает, что вы инициализируете объект массива, а не отдельный объект, вы должны инициализировать отдельные объекты, которые вы хотите использовать в объекте массива, например myclass [0] = new MyClass();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню