android - Android - startActivityForResult onActivityResult 获取 ArrayList
问题描述
这就是我发送 ArrayList 的方式:
val extras = Bundle()
val i = Intent(context, GalleryShow::class.java)
i.putExtra("list", ArrayList(memes))
(context as Activity).startActivityForResult(i, 777)
并在活动 B 中接收它:
intent.getParcelableArrayListExtra<Memes>("list") as ArrayList<Memes>
然后在修改它之后,我设置了假设回到活动 A 的意图:
private lateinit var finishIntent: Intent
finishIntent = Intent()
finishIntent.putExtra("list", ArrayList(modifiedMemes))
setResult(RESULT_OK, finishIntent)
并尝试在 A 中接收它:
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, intent)
if(requestCode == 777 && resultCode == RESULT_OK && data != null) {
if(data.hasExtra("list")) {
val updatedMemes = intent.getParcelableArrayListExtra<Memes>("list") as ArrayList<Memes>
}
}
}
所以我将它设置为从 a 到 b 发送和接收的方式完全相同,但我得到了错误:
kotlin.TypeCastException: null cannot be cast to non-null
在
val updatedMemes = intent.getParcelableArrayListExtra<Memes>("list") as ArrayList<Memes>
这里有什么问题?谷歌真的在乎安卓是一大堆功能失调的狗屎吗?
解决方案
您正在阅读错误的意图 - 您正在使用intent.getParcelableArrayListExtra<Memes>("list") as ArrayList<Memes>
,指的intent
是您的 Activity 的属性,而不是data
您收到的Intent onActivityResult()
:
val updatedMemes = data.getParcelableArrayListExtra<Memes>("list") as ArrayList<Memes>