How to pass object to an activity?

2020-02-07 03:09发布

I have two activities, NewTransferMyOwn.java and FromAccount.java

When I go from NewTransferMyOwn.java to FromAccount.java, I do write code as following

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

When I do come back from FromAccount.java to NewTransferMyOwn.java, then I want to pass a complete object of class Statement

I do write code as

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

I do get error as following on putExtra,

Change to 'getIntExtra'

as I do, there is again casting st to int, what is issue over here, how can I pass Statement object towards back to acitivity?

标签: android
2条回答
Juvenile、少年°
2楼-- · 2020-02-07 03:41

You can't pass arbitrary objects between activities. The only data you can pass as extras/in a bundle are either fundamental types or Parcelable objects.

And Parcelables are basically objects that can be serialized/deserialized to/from a string.

You can also consider passing only the URI refering to the content and re-fetching it in the other activity.

查看更多
可以哭但决不认输i
3楼-- · 2020-02-07 03:49

You can also implement your custom class by Serializable and pass the custom Object,

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

And then pass the Custom Object with the Intent.

intent.putExtra("myobj",customObj);

To retrieve your Object

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

UPDATE:

To pass your custom Object to the previous Activity while you are using startActivityForResult

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

To retrieve the custom Object on the Previous Activity

if(requestCode == MyRequestCode){
     if(resultCode == Activity.RESULT_OK){
         Custom custom = (Custom) data.getSerializableExtra("myobj");
         Log.d("My data", custom.getName()) ;
         finish();
     }
 }
查看更多
登录 后发表回答