首页 > 解决方案 > 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开发的新手,如果其中一些没有意义,我很抱歉。

标签: androidkotlin

解决方案


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)
        }

    }

推荐阅读