无法回到 Android Studio 中的主要活动

Posted

技术标签:

【中文标题】无法回到 Android Studio 中的主要活动【英文标题】:Can't get back to main activity in Android studio 【发布时间】:2021-11-21 12:23:04 【问题描述】:

在我的项目中,我有两个活动: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:无法恢复活动 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)

谢谢

【问题讨论】:

您遇到什么错误?将您的堆栈跟踪作为问题描述的一部分发布 【参考方案1】:

如果你想要返回MainActivity,那么在SecondActivity你应该简单地做:

finish()

这将破坏活动并返回到前一个。

【讨论】:

【参考方案2】:

当您使用startActivity(intent) 启动MainActivity 时,Intent.getAction() 方法将返回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 之上打开的第二个活动来导航回主要活动,那么只需使用 finish() 方法

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于无法回到 Android Studio 中的主要活动的主要内容,如果未能解决你的问题,请参考以下文章

未解决的参考 - 活动无法识别 android studio v4 中的合成导入

Android Studio,我更改了文件夹名称,项目无法加载

我可以在 Android Studio 中调试时退回到之前的断点吗? (掉帧)

如何更改图像并在 5 秒后重新运行线程中的主要活动后不回到 android 中的基本布局

无法按照 Google“入门”页面中的说明在 Android Studio 中添加地图; Android Studio 报错

无法解析 Android Studio 中的依赖项