Passing Objects Between Activities with Gson
Intents are easy to use when you need to pass primitive data types from one activity to another. But what about when you want to pass objects between activities?
You still use intents, but the object needs to be transformed into something that can be added to an intent.
When working on the Punch Buggy app, I needed to pass a Player object from one activity to another. To do this I used the Gson Library.
With Gson you can convert an object to JSON. You can then pass the JSON between activities with intents. We'll look at how to do this in Kotlin.
Setup
First, you need to add Gson as a dependency in your Gradle file:
dependencies {
implementation 'com.google.code.gson:gson:2.8.6'
}
Sending the object
Once Gson is installed and ready to use, you can create a Gson
object and call its toJson
method. This method takes in one argument: the object you want to convert to JSON. In this example, it's foo
.
val foo = Foo() // our custom object to send
val gson = Gson()
val passableObject = gson.toJson(foo)
We can now add passableObject
to the intent with putExtra
.
val intent = Intent(this, MainActivity::class.java)
intent.putExtra("name", passableObject)
passableObject
is a JSON representation of our object, Foo
, that is being sent to MainActivity
.
Receiving the object
To receive the object inside of MainActivity
we need to first get the string from the intent. If this is not null, then we can use Gson to convert the JSON back to our object using the fromJson
method.
// receive the JSON from the intent
val incomingJson = getIntent().getStringExtra("name")
// if it's not null, get the object with gson
if (incomingJson != null) {
val gson = Gson()
// transform the JSON to our custom object
val customObject = gson.fromJson(incomingJson, Foo::class.java)
}
What happened:
- We received the intent and got the value associated with
name
. - If we got the JSON successfully, then we create a Gson object.
- Lastly we use
fromJson
to convert the JSON back to ourFoo
object.fromJson
takes in two arguments: the JSON to convert and the target object to create.
Now we have successfully passed objects between activities!