应用程序在启动另一个带有意图和 .putExtra 的活动时崩溃

Posted

技术标签:

【中文标题】应用程序在启动另一个带有意图和 .putExtra 的活动时崩溃【英文标题】:App crashing on starting another activity with intent and .putExtra 【发布时间】:2021-07-20 11:42:36 【问题描述】:

我正在尝试通过 Intent 和 putExtra 打开另一个活动。 以前可以正常运行,现在崩溃了。

startActivity(new Intent(ForgotPassword.this, OtpVerification.class)
                                .putExtra("user", user)
                                .putExtra("otp", verificationId));
                        finish();

这里的用户是一个类对象,正在另一个活动中接收它

user = getIntent().getParcelableExtra("user");

该应用程序甚至没有进入另一个活动,并且在 logcat 中没有任何错误消息而崩溃。 只有当我添加 .putExtra 代码时才会发生这种情况

【问题讨论】:

【参考方案1】:

尝试按以下方式添加 putExtra

Intent intent = new Intent(ForgotPassword.this, OtpVerification.class);
intent.putExtra("user", user);
intent.putExtra("otp", verificationId);
startActivity(intent);
finish();

然后获取intent extras

Intent intent= getIntent();
Bundle extras = intent.getExtras();
if(extras != null)
    String data = extras.getString("keyName");

【讨论】:

【参考方案2】:

您的用户是您试图从一个活动传递到另一个活动的对象。 因此,您可以创建一个实现 Serializable 接口的自定义类。(您也必须能够使用 Parcelable,但我没有使用它的经验)

//要通过: intent.putExtra("User", user);

// 在第二个 Activity 中检索对象 getIntent().getSerializableExtra("User");

注意点:你的主自定义类中的每个嵌套类都必须实现了 Serializable 接口 例如:

class MainClass implements Serializable 

    public MainClass() 

    public static class ChildClass implements Serializable 

        public ChildClass() 
    

参考:How to pass an object from one activity to another on android

【讨论】:

【参考方案3】:

感谢您的建议,我发现的实际问题是我的用户对象有一个名为 image(字符串类型)的变量,并且长度值约为 1,000,000(我在其中使用 base64 存储字符串编码的图像)。一旦我将大小减小到数千,它就起作用了。我不知道为什么应用程序不能跨活动发送如此大的数据。

【讨论】:

以上是关于应用程序在启动另一个带有意图和 .putExtra 的活动时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

无法解析 putextra 方法

如何将 putExtra() 和 getExtra() 用于字符串数据

如何从 Android 上的意图中获取额外数据?

如何从 Android 上的意图中获取额外数据?

putExtra 使用挂起的意图不起作用

在方向更改后重新创建活动之前更改意图包数据