[英]Intent.putExtra(String,Bundle) vs Intent.putExtra(Bundle)
[英]Android: intent.putExtra() changes objects?
我想将myObject传递给NewActivity类。 为此,我使用putExtra()和getExtras()的意图的方法。 但是看来对象发生了什么变化? 我在传递对象之前和之后都在打印该对象。
这正常吗? 我遇到了问题,因为我在HashMap中使用myObject,并且由于NewActivity中的对象本质上是一个完全不同的对象,因此我不能再将其用作键。
传递对象:
Intent myIntent = new Intent(context, NewActivity.class);
MyClass myObject = new MyClass();
myIntent.putExtra("test", myObject);
System.out.println("OBJECT BEFORE: " + myObject);
检索对象:
MyClass myObject = (MyClass) getIntent().getExtras().getSerializable("test");
System.out.println("OBJECT AFTER: " + myObject);
(不同)打印:
I/System.out: OBJECT BEFORE: my.project.MyClass@8fe5ae4
I/System.out: OBJECT AFTER: my.project.MyClass@9f1fb7b
改变这个
getIntent()。getExtras()。getSerializable()
至
getIntent().getSerializableExtra("test")
序列化和反序列化确实会创建新对象。
如果这是您的问题,因为您将其用作HashMap
的键,则应在类中实现boolean equals(Object other)
和int hashCode()
方法。
查看Wikipedia上的Java hashCode()和Oracle文档中的public int hashCode()
,以了解如何实现“可哈希”对象。
如果您的对象在用作密钥时不再依赖于身份,则应该解决问题。
这就是可序列化对象的工作方式。 100%基本的Java。
他们将对象序列化为原始数据,然后在不进行序列化时将创建一个相同类型的全新对象,并将旧对象具有的所有值设置为新对象。
因此,对象引用将不相同,这也是为什么当您调用System.out.println
时会打印出不同的hashCode的原因。
对象的内部值将相同。
为了将一个对象的活动传递给另一个活动,您的对象类应实现“可序列化”。
public class MyClass implements Serializable{
//
}
传递数据
Intent myIntent = new Intent(context, NewActivity.class);
MyClass myObject = new MyClass();
myIntent.putExtra("test", myObject);
检索数据
MyClass myObject = (MyClass) getIntent().getSerializable("test");
希望这会工作:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.