Ramzy Abu elloza Ответов: 1

Как это исправить: исключение нулевого указателя при создании намеренного сбоя


I'm trying to make an android app but I encoutered this error and I don't know what to do and why is it showing from the first place, the app crashes with the following error in the log:





E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: com.example.ramy.medicare, PID: 2487
                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.ramy.medicare/com.example.ramy.medicare.Profile.materialtabs.activity.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                      at android.app.ActivityThread.-wrap12(ActivityThread.java)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                      at android.os.Handler.dispatchMessage(Handler.java:102)
                      at android.os.Looper.loop(Looper.java:154)
                      at android.app.ActivityThread.main(ActivityThread.java:6119)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                   
***Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                      at com.example.ramy.medicare.Profile.materialtabs.activity.MainActivity.onCreate(MainActivity.java:43)***


                      at android.app.Activity.performCreate(Activity.java:6679)
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                      at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6119) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 


here is the code:

    package com.example.ramy.medicare.Profile.materialtabs.activity;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.LayoutInflater;
    import android.view.View;
    
    import android.widget.Button;
    
    import com.example.ramy.medicare.R;
    
    
    
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
    
        private Button  btnScrollableTabs_b,  btnIconTabs_b, btnCustomIconTextTabs_b;
    
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    //        toolbar = (Toolbar) findViewById(R.id.toolbar);
    //        setSupportActionBar(toolbar);
    
    
    
    
    
    
    
    
            btnScrollableTabs_b = (Button) findViewById(R.id.btnScrollableTabs);
            btnIconTabs_b = (Button) findViewById(R.id.btnIconTabs);
            btnCustomIconTextTabs_b = (Button) findViewById(R.id.btnCustomIconTabs);
    
            //at these lines is the error:
            **btnScrollableTabs_b.setOnClickListener(this);   
            btnIconTabs_b.setOnClickListener(this);
            btnCustomIconTextTabs_b.setOnClickListener(this);**
    
    
    
    //        btnSimpleTabs = (Button) findViewById(R.id.btnSimpleTabs);
    //        btnScrollableTabs = (Button) findViewById(R.id.btnScrollableTabs);
    //        btnIconTextTabs = (Button) findViewById(R.id.btnIconTextTabs);
    //        btnIconTabs = (Button) findViewById(R.id.btnIconTabs);
    //        btnCustomIconTextTabs = (Button) findViewById(R.id.btnCustomIconTabs);
    
    //        btnSimpleTabs.setOnClickListener(this);
    
    //        btnScrollableTabs.setOnClickListener(this);
    //        btnIconTextTabs.setOnClickListener(this);
    //        btnIconTabs.setOnClickListener(this);
    //        btnCustomIconTextTabs.setOnClickListener(this);
    
    }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
    
                case R.id.btnScrollableTabs:
                    startActivity(new Intent(MainActivity.this, ScrollableTabsActivity.class));
                    break;
                case R.id.btnIconTabs:
                    startActivity(new Intent(MainActivity.this, IconTabsActivity.class));
                    break;
                case R.id.btnCustomIconTabs:
                    startActivity(new Intent(MainActivity.this, CustomViewIconTextTabsActivity.class));
                    break;
            }
        }
    }

Kindly tell me what to do Im so confused, I instantiated the object so why am i getting this error ???


Что я уже пробовал:

Я пытался исправить макет я пытался изменить переменные,
Я все перепробовал, пожалуйста, помогите

Richard MacCutchan

Используйте отладчик, чтобы выяснить, почему ваши объекты Button являются нулевыми.

wseng

Разместите свой макет здесь

1 Ответов

Рейтинг:
0

OriginalGriff

Это одна из самых распространенных проблем, которые нам задают, и это также та, на которую мы меньше всего готовы ответить, но вы больше всего готовы ответить сами.

Позвольте мне просто объяснить, что означает ошибка: вы пытались использовать переменную, свойство или возвращаемое значение метода, но оно содержит null - что означает, что в переменной нет экземпляра класса.
Это немного похоже на карман: у вас есть карман в рубашке, в котором вы держите ручку. Если вы сунете руку в карман и обнаружите, что там нет ручки, вы не сможете подписать свое имя на листе бумаги - и вы получите очень забавный вид, если попытаетесь! Пустой карман дает вам нулевое значение (здесь нет ручки!), поэтому вы не можете сделать ничего, что обычно делали бы, когда извлекли свою ручку. Почему он пуст? Вот в чем вопрос - может быть, вы забыли взять ручку, когда уходили из дома сегодня утром, или, возможно, вы оставили ручку в кармане вчерашней рубашки, когда снимали ее вчера вечером.

Мы не можем сказать, потому что нас там не было, и, что еще важнее, мы даже не можем видеть вашу рубашку, не говоря уже о том, что находится в кармане!

Вернемся к компьютерам, и вы каким - то образом сделали то же самое-и мы не можем увидеть ваш код, а тем более запустить его и узнать, что содержит null, когда это не должно быть.
Но вы можете - и ваша среда разработки поможет вам здесь. Запустите свою программу в отладчике, и когда она выйдет из строя, отладчик покажет вам строку, в которой он обнаружил проблему. Затем вы можете начать просматривать различные его части, чтобы увидеть, какое значение равно null, и начать просматривать свой код, чтобы выяснить, почему. Поэтому поставьте точку останова в начале метода, содержащего строку ошибки, и снова запустите программу с самого начала. На этот раз он остановится перед ошибкой и позволит вам изучить, что происходит, пройдя через код, глядя на ваши значения.

Но мы не можем этого сделать - у нас нет вашего кода, мы не знаем, как его использовать, если бы он у нас был, у нас нет ваших данных. Так что попробуйте - и посмотрите, сколько информации вы сможете узнать!