相关文章推荐

Android Kotlin将ArrayList<>传递给第二个活动

1 人关注

我正试图将一个 ArrayList 从我的 MainActivity 传递到我的 MeasuringActivity 。我遇到了一个问题,我不知道该如何解决。我使用的是SDK,我用于ArrayList的类没有实现Serialization或Parcelable,这个类也是只读的,所以我不能编辑它。

这是我的 ArrayList 代码 private val mDeviceList: ArrayList<XsensDotDevice> = ArrayList() ,由于 XsensDotDevice 类没有实现Serilization或Parcelable,我不确定如何通过 Intent 将ArrayList传递给我的MeasuringActivity。

下面是我写的传递变量的代码

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

是否有其他方法可以将这个变量传递给其他活动,而我可能没有遇到过?我是安卓开发的新手,如果有些地方不明白,请原谅。

2 个评论
你试过使用GSON和数据类吗?你可以将任何数据类的数组转换为JSON字符串,然后直接将其作为字符串传递,并将JSON转换为数组。
@iknow,然而我也会建议这样做。
android
kotlin
Lukerayner
Lukerayner
发布于 2020-07-25
1 个回答
Muhammad Maqsood
Muhammad Maqsood
发布于 2020-07-25
已采纳
0 人赞同

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>
 
推荐文章