我不知道为什么BottomNavigationView为null。我正在使用Firebase API,并且添加了一些代码以将数据添加到JSON文件。现在,当我这样做之后,我的一项活动就停止了工作。这甚至不是我正在从事的活动。我的导航等于null,然后检查了XML文件。名称相同,调试也无济于事,因为它向我显示了设置BottomNavigationView并为我提供NullPointer的一行代码。

这是导致此问题的导航:

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener

    = new BottomNavigationView.OnNavigationItemSelectedListener()

  {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_to_dos:
                return true;
            case R.id.navigation_categories:
                intent = new Intent(ToDos.this, Categories.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                startActivity(intent);
                return true;
            case R.id.navigation_account:
                intent = new Intent(ToDos.this, Account.class);
                intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
                startActivity(intent);
                return true;
        }
        return false;
    }
};


这是我在onCreate()函数中初始化有关Navigaion的所有内容的部分:

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
        navigation.setSelectedItemId(R.id.navigation_to_dos);


我收到此错误:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: lb335.bbbaden.ch.pendenzenverwaltung, PID: 25288
              java.lang.RuntimeException: Unable to start activity ComponentInfo{lb335.bbbaden.ch.pendenzenverwaltung/lb335.bbbaden.ch.pendenzenverwaltung.ToDos}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.BottomNavigationView.setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView$OnNavigationItemSelectedListener)' on a null object reference
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3184)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3279)
                  at android.app.ActivityThread.-wrap12(Unknown Source:0)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1881)
                  at android.os.Handler.dispatchMessage(Handler.java:108)
                  at android.os.Looper.loop(Looper.java:166)
                  at android.app.ActivityThread.main(ActivityThread.java:7406)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926)
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.design.widget.BottomNavigationView.setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView$OnNavigationItemSelectedListener)' on a null object reference
                  at lb335.bbbaden.ch.pendenzenverwaltung.ToDos.onCreate(ToDos.java:76)
                  at android.app.Activity.performCreate(Activity.java:7365)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3137)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3279) 
                  at android.app.ActivityThread.-wrap12(Unknown Source:0) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1881) 
                  at android.os.Handler.dispatchMessage(Handler.java:108) 
                  at android.os.Looper.loop(Looper.java:166) 
                  at android.app.ActivityThread.main(ActivityThread.java:7406) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:926) 


我的活动XML:

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:background="?android:attr/windowBackground"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:menu="@menu/navigation" />


我对此一无所知,非常感谢经验丰富的Coders提供的一些帮助。

编辑:

多亏了snachmsm,我发现我的功能顺序被弄乱了。我在实际设置内容之前执行了findViewById()。我不得不将其关闭,现在它可以工作了。

最佳答案

造成原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“ void android.support.design.widget.BottomNavigationView.setOnNavigationItemSelectedListener(android.support.design.widget.BottomNavigationView $ OnNavigationItemSelectedListener)”


您的BottomNavigationViewnull,这就是事实。此行未获取您的View

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);


您确定您的BottomNavigationView属于夸张版式吗? R.id.navigation是否已为BottomNavigationView正确设置?显示onCreate方法中的一些XML和更多代码。也许订单不当? (例如findViewByIdsetContentView之前调用)

编辑:好的,在XML中为id正确设置了View,但是您只发布了其中的一小部分,还显示了如何在Activity中膨胀该XML。

07-24 09:49
查看更多