# 方法
以前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するより簡単