Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Activity間のObject引き渡し(Gson)

Posted at

# 方法
以前ObjectでSerializableをimplementsした方法を記載しました。
Activity間のObject引き渡し

今回はGsonを使用してObjectを引き渡します。

実装

Gradle

build.gradle
dependencies {
    // Gson
    compile 'com.google.code.gson:gson:2.8.0'
}

Object

Activity間で引き渡すobject

DataState.kt
data class DataState(
    val id: Int,
    val name: String
)

Activity

引き渡し元

MainActivity.kt
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val intent = Intent(this, SecondActivity::class.java)
        val state = DataState(0, "name0")
        // Gsonで Object → String
        intent.putString(SecondActivity.KEY_STATE, Gson().toJson(state)) 
        startActivity(intent)
    }
}

引き渡し先

SecondActivity.kt
class SecondActivity : AppCompatActivity() {

    companion object {
        val KEY_STATE = "key_state"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        val stateStr = intent.getString(KEY_STATE)
        // Gsonで String → Object
        val state = Gson().fromJson<DataState>(stateStr, DataState::class.java)
        
        if(state is DataState){
            println(state.id)
            println(state.name)
        }
    }
}

出力結果

0
name0

list objectの引き渡し

Activity

引き渡し元

MainActivity.kt
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val states = arrayListOf<DataState>()
        for(i in 0..2){
            val state = DataState(i, "name$i")
            states.add(state)
        }

        val intent = Intent(this, SecondActivity::class.java)
        // Gsonで List<Object> → String
        intent.putExtra(SecondActivity.KEY_STATE, Gson().toJson(states))
        startActivity(intent)
    }
}

引き渡し先

SecondActivity.kt
class SecondActivity : AppCompatActivity() {

    companion object {
        val KEY_STATE = "key_state"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        val statesStr = intent.getStringExtra(KEY_STATE)
        // Gsonで String → List<Object>
        val states = Gson().fromJson<List<DataState>>(statesStr, object : TypeToken<List<DataState>>() {}.type)

        states.forEach {
            println(it.id)
            println(it.name)
        }
    }
}

list object 出力結果

0
name0
1
name1
2
name2

まとめ

Serializableをimplementsするより簡単

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?