android - Android Kotlin 将 ArrayList<> 传递给第二个 Activity
问题描述
我正在尝试将一个ArrayList
从 my传递MainActivity
到我的MeasuringActivity
. 我遇到了一个我不知道如何解决的问题。我正在使用 SDK,而我用于 ArrayList 的类没有实现 Serialization 或 Parcelable,该类也是只读的,因此我无法对其进行编辑。
这是我的ArrayList
代码private val mDeviceList: ArrayList<XsensDotDevice> = ArrayList()
,由于XsensDotDevice
类没有实现 Serilization 或 Parcelable,我不确定如何通过 ArrayList 将其传递给我的 MeasuringActivity Intent
。
这是我为传递变量而编写的代码
val intent = Intent(this, MeasuringActivity::class.java)
val bundle = Bundle()
bundle.putSerializable("product", mDeviceList)
intent.putExtras(bundle)
startActivity(intent)
然后,当它尝试传递变量时,我收到以下错误
2020-07-24 23:36:42.083 28178-28178/com.example.bodymotion E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.bodymotion, PID: 28178
java.lang.RuntimeException: Parcel: unable to marshal value com.xsens.dot.android.sdk.models.XsensDotDevice@3a003ac
是否有另一种方法可以将此变量传递给我可能没有遇到的其他活动?我是android开发的新手,如果其中一些没有意义,我很抱歉。
解决方案
1. 在模块级 Gradle 文件中添加以下依赖项:
implementation 'com.google.code.gson:gson:2.8.6'
2.发送列表对象如下:
val list = ArrayList<SomeJavaClass>()
val stringData = Gson().toJson(list)
val intent = Intent(this, MainActivity2::class.java)
intent.putExtra("DATA_PASS", stringData)
startActivity(intent)
3.在第二个活动中接收列表对象:
intent.hasExtra("DATA_PASS").let {
if (it) {
val listType: Type =
object : TypeToken<List<SomeJavaClass>>() {}.type
val listRcvd = Gson().fromJson(
intent.getStringExtra("DATA_PASS"),
listType
) as List<SomeJavaClass>
println(listRcvd)
}
}
推荐阅读
- lua - 如何在游戏中创建和加入私人服务器 roblox?
- javascript - 如何使用 Javascript 使 div 出现 onclick?
- ios - 在 SwiftUI 中重新创建 twitter 复制到剪贴板的动画
- hadoop - Hive UNION ALL 返回不正确的结果
- elasticsearch - elasticsearch-7.9.0 无法从类型 [keyword] 更改为 [text]
- php - 如何根据模型属性之一的值进行动态预加载?
- r - 如何更改ggplot中的点形状
- r - 分类变量的最佳子集选择方法
- python - 为了可读性,Python 给出另一个名称而不是 `*args` 是一种好习惯吗?
- sas - SAS中不同格式的相同日期值是否相同?