无法返回 Android 工作室中的主要 activity

Can't get back to main activity in Android studio

在我的项目中,我有两个活动:MainActivity.class 和 SecondActivity.class。

要从 MainActivity 切换到 SecondActivity,我使用以下代码:

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
MainActivity.this.startActivity(intent);

而且有效。

我使用相同的代码从 SecondActivity 切换到 MainActivity,但应用程序崩溃了:

Intent intent = new Intent(getApplicationContext(),MainActivity.class);
SecondActivity.this.startActivity(intent);

如果我尝试从 MainActivity 本身打开 MainActivity,它也会崩溃,但如果我尝试从 SecondActivity 打开 SecondActivity,则不会发生这种情况。

有什么想法吗?

这是我的堆栈跟踪:

2021-09-29 17:25:56.843 25827-25827/st.com.st25androiddemoapp E/AndroidRuntime:致命异常:main 进程:st.com.st25androiddemoapp,PID:25827 java.lang.RuntimeException: 无法恢复 activity {st.com.st25androiddemoapp/st.com.st25androiddemoapp.MainActivity}: java.lang.NullPointerException: 尝试调用虚拟方法 'boolean java.lang.String.equals(java.lang.Object)' 在空对象引用上 在 android.app.ActivityThread.performResumeActivity(ActivityThread.java:4270) 在 android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4302) 在 android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52) 在 android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:176) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:224) 在 android.app.ActivityThread.main(ActivityThread.java:7562) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 由以下原因引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法 'boolean java.lang.String.equals(java.lang.Object)' 在 st.com.st25androiddemoapp.MainActivity.onResume(MainActivity.java:279) 在 android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1454) 在 android.app.Activity.performResume(Activity.java:8050) 在 android.app.ActivityThread.performResumeActivity(ActivityThread.java:4260)

谢谢

当您使用 startActivity(intent) 启动 MainActivity 时,Intent.getAction() 方法将 return null。此方法在 MainActivity#onResume.

中调用

为防止您的应用程序崩溃,您需要在调用任何方法之前确保 action 不是 null(在您的情况下为 equals()。)

我找到了源代码。只是和 action != null && 这里

    if (action != null && (action.equals(NfcAdapter.ACTION_NDEF_DISCOVERED) ||
        action.equals(NfcAdapter.ACTION_TECH_DISCOVERED) ||
        action.equals(NfcAdapter.ACTION_TAG_DISCOVERED))) {

        // If the resume was triggered by an NFC event, it will contain an EXTRA_TAG providing
        // the handle of the NFC Tag
        Tag androidTag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
        if (androidTag != null) {
            // This action will be done in an Asynchronous task.
            // onTagDiscoveryCompleted() of current activity will be called when the discovery is completed.
            new TagDiscovery(this).execute(androidTag);
        }
    }

别忘了加括号()

它将修复 NPE,但我不确定这是否是最佳解决方案。我不知道你想达到什么目的。

更新 如果您想通过关闭在 MainActivity 顶部打开的 Second activity 导航回 main activity,则只需使用 finish() 方法

你试过用this替换getapplicationcontext()吗?

Intent intent = new Intent(SecondActivity.this,MainActivity.class);
startActivity(intent);

如果你想要的是 returnMainActivity 那么在 SecondActivity 你应该简单地做:

finish()

这将破坏 activity 和 return 到前一个。