簡體   English   中英

Android:intent.putExtra()會更改對象嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM