应用程序在使用 Intent 和 .putExtra 启动另一个活动时崩溃

问题描述

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

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

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

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

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

解决方法

尝试通过以下方式添加 putExtra

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

然后获得意图附加

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

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

//传递: intent.putExtra("用户",用户);

// 在第二个 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

,

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...