如何将对象传递给一个活动?

4

我有两个活动,NewTransferMyOwn.java和FromAccount.java

当我从NewTransferMyOwn.java 到 FromAccount.java时,我写的代码如下:

Intent i = new Intent(NewTransferMyOwn.this, FromAccount.class);
startActivityForResult(i, FROM_ACCOUNT);

当我从 FromAccount.java 返回到 NewTransferMyOwn.java 时,我想传递一个完整的 Statement 类对象。

我的代码如下:

Statement st = ItemArray.get(arg2);//ItemArray is ArrayList<Statement>, arg2 is int
Intent intent = new Intent(FromAccount.this,NewTransferMyOwn.class).putExtra("myCustomerObj",st);

我在使用putExtra时遇到以下错误:

请改为 'getIntExtra'

当我这样做时,又需要将st强制转换为int,这里有什么问题?我该如何将Statement对象传回activity?


1
你应该进行一些搜索:http://www.google.com.pk/search?q=android+passing+my+object+to+another+activity - Adil Soomro
我觉得你和谷歌之间有什么关系 :-P @AdilSoomro,谢谢,我确实有,但现在时间很紧。 - Chatar Veer Suthar
2个回答

7

您还可以通过实现Serializable接口并传递自定义对象来实现自定义类的序列化。

public class MyCustomClass implements Serializable
{
  // getter and setters
}

然后将自定义对象与Intent一起传递。
intent.putExtra("myobj",customObj);

获取您的对象

Custom custom = (Custom) data.getSerializableExtra("myobj");

更新:

当您使用startActivityForResult时,要将自定义对象传递给上一个活动,请按以下步骤操作:

Intent data = new Intent();
Custom value = new Custom();
value.setName("StackOverflow");
data.putExtra("myobj", value);
setResult(Activity.RESULT_OK, data);
finish();

在前一个活动中检索自定义对象

if(requestCode == MyRequestCode){
     if(resultCode == Activity.RESULT_OK){
         Custom custom = (Custom) data.getSerializableExtra("myobj");
         Log.d("My data", custom.getName()) ;
         finish();
     }
 }

我无法这样做,因为出现了以下问题: “putExtra(String, Parcelable) 方法对于 Intent 类型是不明确的。” - Marcin Erbel
在之前的“Activity”中,结果将从“Bundle”中提取,因此它将是newBundle()..getExtras().getSerializeable("key")吗? - Dakait

2

在活动之间无法传递任意对象。您可以作为附加信息/捆绑包传递的数据只能是基本类型或Parcelable对象。

而Parcelables基本上是可以序列化/反序列化为/从字符串的对象。

您还可以考虑仅传递引用内容的URI,并在其他活动中重新获取它。


1
Parcelable对象不会被序列化为字符串。它们是特殊的对象,可以通过Binder IPC传递。基本上,要在进程之间传递对象,该对象应该实现Parcelable接口并且应该由基本类型组成。 - Yury

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接