Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 第二次通过intent启动时活动崩溃_Java_Android_Firebase_Android Intent_Activity Finish - Fatal编程技术网

Java 第二次通过intent启动时活动崩溃

Java 第二次通过intent启动时活动崩溃,java,android,firebase,android-intent,activity-finish,Java,Android,Firebase,Android Intent,Activity Finish,我正在使用firebase设计一个简单的android数据存储/检索应用程序 Activity1是一种登录活动,当用户成功登录时,它直接进入Activity2。第一次登录时没有问题,一切都在正确的位置。我在Activity2中有一个导航抽屉,用于切换片段,在该导航抽屉中,用户可以注销并返回登录活动。下面是从Activity2中摘录的内容,它将用户带回登录活动 case R.id.nav_logout: account_key = "&qu

我正在使用firebase设计一个简单的android数据存储/检索应用程序

Activity1
是一种登录活动,当用户成功登录时,它直接进入
Activity2
。第一次登录时没有问题,一切都在正确的位置。我在
Activity2
中有一个导航抽屉,用于切换片段,在该导航抽屉中,用户可以注销并返回登录活动。下面是从
Activity2
中摘录的内容,它将用户带回登录活动

            case R.id.nav_logout:
            account_key = "";
            Toast.makeText(getApplicationContext(), "Logged Out", Toast.LENGTH_LONG).show();
            Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
            startActivity(intent);
            finish();
            break;
当我单击注销按钮时,它会按原样将我带到
活动1
。现在的问题是,当我再次尝试登录时,应用程序崩溃,出现以下错误:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.adzu.bfarsystem, PID: 2143
    java.lang.NullPointerException: Attempt to invoke interface method 'android.view.MenuItem android.view.Menu.add(int, int, int, java.lang.CharSequence)' on a null object reference
        at android.view.MenuInflater$MenuState.addItem(MenuInflater.java:540)
        at android.view.MenuInflater.parseMenu(MenuInflater.java:193)
        at android.view.MenuInflater.inflate(MenuInflater.java:114)
        at androidx.appcompat.view.SupportMenuInflater.inflate(SupportMenuInflater.java:120)
        at com.adzu.bfarmobile.activities.MainActivity.createSearchView(MainActivity.java:153)
        at com.adzu.bfarmobile.activities.MainActivity$1.dataRetrieved(MainActivity.java:109)
        at com.adzu.bfarmobile.entities.DatabaseReader$3.onChildAdded(DatabaseReader.java:64)
        at com.google.firebase.database.core.ChildEventRegistration.fireEvent(ChildEventRegistration.java:79)
        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
以下是触发错误的行:

LoginActivity.java行95-102

               if (activated) {
                    Toast.makeText(getApplicationContext(), "Login Success!", Toast.LENGTH_LONG).show();

                    Intent newIntent = new Intent(getApplicationContext(), MainActivity.class);
                    newIntent.putExtra("account_key", dataSnapshot.getKey());
                    startActivity(newIntent);
                    finish();
                }
MainActivity.java行95-127

Intent intent = getIntent();
account_key = intent.getStringExtra("account_key");

DatabaseReference ref = FirebaseDatabase.getInstance().getReference("account");
DatabaseReader.readDataByKey(account_key, ref, new OnGetDataListener() {
    @Override
    public void dataRetrieved(DataSnapshot dataSnapshot) {
        Account user = new Account((Map<String, Object>) dataSnapshot.getValue());
        fragment1 = new ListFragment();
        fragment1.setUser(user);
        createSearchView();
        showSearchView();
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment1).commit();
        navigationView.setCheckedItem(R.id.nav_operatorlist);
        TextView acct_name = findViewById(R.id.acct_name);
        acct_name.setText("Logged in as: " + user.getUsername());
    }

    @Override
    public void dataExists(DataSnapshot dataSnapshot) {

    }

    @Override
    public void onStart() {

    }

    @Override
    public void onFailure() {

    }
});
DatabaseReader.java第64-89行

    public static void readDataByKey(String account_key, DatabaseReference ref, final OnGetDataListener listener) {
        listener.onStart();
        Query query = ref.orderByKey().equalTo(account_key);
        query.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                listener.dataRetrieved(dataSnapshot);
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                listener.onFailure();
            }
        });

    }

任何帮助都将不胜感激。谢谢

您可能会遇到比赛情况。 在系统调用onCreateOptions菜单之前,您可能已经调用了createSearchView,因此菜单为null

尝试在以下行之后使用onCreateOptions菜单调用createSearchView

this.menu = menu;

你可能会遇到比赛情况。 在系统调用onCreateOptions菜单之前,您可能已经调用了createSearchView,因此菜单为null

尝试在以下行之后使用onCreateOptions菜单调用createSearchView

this.menu = menu;