Java 安卓工作室;BottomNavigationView=null

Java 安卓工作室;BottomNavigationView=null,java,android,android-studio,bottomnavigationview,Java,Android,Android Studio,Bottomnavigationview,我不知道为什么BottomNavigationViewnull。我正在使用Firebase API,并添加了一些代码来向JSON文件添加数据。在我做了这些之后,我的一项活动就停止了。这甚至不是我正在做的活动。我的导航等于null,我检查了XML文件。名称相同,调试也没有帮助,因为它向我显示了一行设置BottomNavigationView并给我一个空指针的代码 这是导致此问题的导航: private BottomNavigationView.OnNavigationItemSelectedLis

我不知道为什么
BottomNavigationView
null。我正在使用Firebase API,并添加了一些代码来向JSON文件添加数据。在我做了这些之后,我的一项活动就停止了。这甚至不是我正在做的活动。我的导航等于null,我检查了XML文件。名称相同,调试也没有帮助,因为它向我显示了一行设置
BottomNavigationView
并给我一个空指针的代码

这是导致此问题的导航:

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" />

我对这一点很迷茫,非常感谢更有经验的程序员的帮助

编辑:


多亏了snachmsm,我发现我的函数顺序都搞乱了。在实际设置内容之前,我执行了
findViewById()
。我不得不关掉它,现在它工作了。

你的导航返回
false
,因为你把它设置为
false

请在导航结束时检查并将返回类型从
return false更改为
to
返回true

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; // Here is the problem. Change it from false to true
}};
另外,
BottomNavigationView-navigation=(BottomNavigationView)findViewById(R.id.navigation)

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

您的
BottomNavigationView
null
,这是事实。此行没有获取您的
视图

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
您的
BottomNavigationView
是否属于充气布局
R.id.navigation
是否为
BottomNavigationView
正确设置?显示
onCreate
方法中的一些XML和更多代码。也许秩序不好?(例如,在
setContentView
之前调用
findViewById


编辑:好的,
id
视图
在XML内部正确设置,但是您只发布了一小部分,还展示了如何在
活动
中膨胀此XML在我的案例中我也遇到了这个问题,我通过在

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_seller_home);//here was problem,i was  inflating wrong home activity

问题是我的BottomNavigationView变量等于null:/I添加了错误消息。当我尝试将我的BottomNavigationView变量设置为findViewById(R.id.navigation)时,onCreate()函数中会弹出它。我尝试将returnvalue设置为true,但遗憾的是它没有更改outcomenavigation.setOnNavigationItemSelectedListener(此);事实上,你是对的。我搞乱了顺序,我的findViewById写在setContentView之前。谢谢。它又起作用了。