![](/img/trans.png)
[英]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.