【发布时间】:2018-12-11 08:18:51
【问题描述】:
我创建一个这样的包:
val intent = Intent(classContext, Recipes::class.java)
var bundle = Bundle().apply {
putParcelableArrayList("LIST", ArrayList<Parcelable>(fbModel.recipeArray))
putInt("POSITION", position)
}
intent.putExtra("bundle", bundle)
//CHECK TO SEE IF DATA IS STORED
var passedIntent = intent.extras
var bundle2: Bundle = passedIntent.getBundle("bundle")
var recipeArray: ArrayList<RecipeTemplate> = bundle2.getParcelableArrayList("LIST")
Log.d("TAGC", " " + recipeArray[0].recipeHeader) //SUCCESS!
Log.d("TAGC", " " + position) //SUCCESS!
startActivity(intent)
为了查看它是否有效,我从 bundle 创建并记录了变量,它们确实包含正确的数据。
存储在数组RecipeTemplate中的类对象为Parcelized,如下所示:
@SuppressLint("ParcelCreator")
@Parcelize
class RecipeTemplate: Parcelable {
var recipeHeader: String? = null
var recipeText: String? = null
var recipeImage: String? = null
var recipeKey: String? = null
}
到目前为止一切顺利。但是,当我在其他活动中收到捆绑包时,它出于某种原因返回 null,即使我使用与上面相同的确切代码(测试代码以查看捆绑包是否存储了正确的数据)。这是接收活动:
var passedIntent: Bundle = intent.extras
var bundle = passedIntent.getBundle("bundle")
var counter: Int = bundle.getInt("POSITION", 0)
var recipeArray: ArrayList<RecipeTemplate> = bundle.getParcelableArrayList("LIST")
Log.d("TAGA", "PASSED " + counter) //SUCCESS
Log.d("TAGA", "PASSED " + recipeArray[0].recipeHeader) //FAIL: null
计数器/位置变量返回正确的数据,但 recipeArray 出于某种原因为空。同样,它在之前的活动中有效,所以我不明白为什么这次会有所不同......有什么想法吗?
更新
如果我将光标悬停在类中的变量上,它会显示:Property not serialized as parcel。听起来事情并没有按我的预期工作......这是什么原因?
【问题讨论】:
-
您确定您的食谱图片不为空吗?因为在第一个活动中,您正在检查配方标题。在第二个,您正在检查图像。
-
哦,那只是我尝试不同的对象变量。我确定它不为空。我会更新问题。感谢您指出:)
-
我会尝试提出一个答案。请确认它有效:)
标签: android android-intent bundle parcelable