RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1320332
Accepted
Ethernets
Ethernets
Asked:2022-08-22 21:38:37 +0000 UTC2022-08-22 21:38:37 +0000 UTC 2022-08-22 21:38:37 +0000 UTC

如何正确地将 ArrayList 传递给另一个活动

  • 772

我有以下数据类:

data class LegendWrapper(
    val data: List<PlayerPerformance>? = emptyList()

)
data class PlayerPerformance(val name: String, val value: Int, val key: String)

data class TestList(val name: String, val data: LegendWrapper)

然后我完成了三月的清单

for((key, value ) in data.legends.all){
recList.add(TestList(key, value))
}

然后,当单击 RecyclerView 中的名称时,我想在另一个活动中获取数据。我尝试按照下面的示例执行此操作,但结果我以字符串的形式获取数据,使用它根本无法正常工作,我尝试通过putParcelableArrayListExtra我偶然发现类型不匹配异常,如何正确传输 ArrayList到另一个活动?

 heroesAdapt = HeroesRecyclerAdapter(this, recList){
   testList -> val heroesStatsActivity = Intent(this,HeroesStatsActivity::class.java)
   heroesStatsActivity.putExtra("nicknameHeroes", testList.name)
   heroesStatsActivity.putExtra("data", testList.data.toString())
   startActivity(heroesStatsActivity)
}

我用谷歌搜索了一下,找到了这样一个选项,但它也不起作用,heroesStatsActivity.putExtra("data", testList) 所以我把它传递了。并得到它这样val test = intent.extras?.getSerializable("data") as TestList尽管数据类本身继承自Serializable data class TestList(val name: String, val data: LegendWrapper) : Serializable从列表中选择名称时,这是错误

2021-08-22 17:33:12.426 4950-4950/com.example.studyactivitylifecyl
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.studyactivitylifecyl, PID: 4950
    java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name =
com.example.studyactivitylifecyl.Model.TestList)
        at android.os.Parcel.writeSerializable(Parcel.java:2113)
        at android.os.Parcel.writeValue(Parcel.java:1883)
        at android.os.Parcel.writeArrayMapInternal(Parcel.java:975)
        at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1620)
        at android.os.Bundle.writeToParcel(Bundle.java:1303)
        at android.os.Parcel.writeBundle(Parcel.java:1044)
        at android.content.Intent.writeToParcel(Intent.java:10855)
        at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3668)
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1723)
        at android.app.Activity.startActivityForResult(Activity.java:5314)
        at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:597)
        at android.app.Activity.startActivityForResult(Activity.java:5272)
        at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:583)
        at android.app.Activity.startActivity(Activity.java:5658)
        at android.app.Activity.startActivity(Activity.java:5611)
        at com.example.studyactivitylifecyl.HeroesActivity$onCreate$1.invoke(HeroesActivity.kt:45)
        at com.example.studyactivitylifecyl.HeroesActivity$onCreate$1.invoke(HeroesActivity.kt:40)
        at com.example.studyactivitylifecyl.Adapters.HeroesRecyclerAdapter$Holder.bindHeroes$lambda-0(HeroesRecyclerAdapter.kt:25)
        at com.example.studyactivitylifecyl.Adapters.HeroesRecyclerAdapter$Holder.lambda$m9Ppe9nWqwgcbjiXqOm_6-7XHbo(Unknown
Source:0)
        at com.example.studyactivitylifecyl.Adapters.-$$Lambda$HeroesRecyclerAdapter$Holder$m9Ppe9nWqwgcbjiXqOm_6-7XHbo.onClick(Unknown
Source:4)
        at android.view.View.performClick(View.java:7448)
        at android.view.View.performClickInternal(View.java:7425)
        at android.view.View.access$3600(View.java:810)
        at android.view.View$PerformClick.run(View.java:28305)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.io.NotSerializableException: com.example.studyactivitylifecyl.Model.LegendWrapper
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240)
        at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
        at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
        at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
        at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
        at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
        at android.os.Parcel.writeSerializable(Parcel.java:2108)
        at android.os.Parcel.writeValue(Parcel.java:1883) 
        at android.os.Parcel.writeArrayMapInternal(Parcel.java:975) 
        at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1620) 
        at android.os.Bundle.writeToParcel(Bundle.java:1303) 
        at android.os.Parcel.writeBundle(Parcel.java:1044) 
        at android.content.Intent.writeToParcel(Intent.java:10855) 
        at android.app.IActivityTaskManager$Stub$Proxy.startActivity(IActivityTaskManager.java:3668) 
        at android.app.Instrumentation.execStartActivity(Instrumentation.java:1723) 
        at android.app.Activity.startActivityForResult(Activity.java:5314) 
        at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:597) 
        at android.app.Activity.startActivityForResult(Activity.java:5272) 
        at androidx.activity.ComponentActivity.startActivityForResult(ComponentActivity.java:583) 
        at android.app.Activity.startActivity(Activity.java:5658) 
        at android.app.Activity.startActivity(Activity.java:5611) 
        at com.example.studyactivitylifecyl.HeroesActivity$onCreate$1.invoke(HeroesActivity.kt:45) 
        at com.example.studyactivitylifecyl.HeroesActivity$onCreate$1.invoke(HeroesActivity.kt:40) 
        at com.example.studyactivitylifecyl.Adapters.HeroesRecyclerAdapter$Holder.bindHeroes$lambda-0(HeroesRecyclerAdapter.kt:25) 
        at com.example.studyactivitylifecyl.Adapters.HeroesRecyclerAdapter$Holder.lambda$m9Ppe9nWqwgcbjiXqOm_6-7XHbo(Unknown
Source:0) 
        at com.example.studyactivitylifecyl.Adapters.-$$Lambda$HeroesRecyclerAdapter$Holder$m9Ppe9nWqwgcbjiXqOm_6-7XHbo.onClick(Unknown
Source:4) 
        at android.view.View.performClick(View.java:7448) 
        at android.view.View.performClickInternal(View.java:7425) 
        at android.view.View.access$3600(View.java:810) 
        at android.view.View$PerformClick.run(View.java:28305) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

稍微改了一下代码。

@Parcelize
data class LegendWrapper(
    val data: List<PlayerPerformance>? = emptyList()

): Parcelable

@Parcelize
data class PlayerPerformance(val name: String, val value: Int, val key: String): Parcelable

@Parcelize
data class TestList(val name: String, val data: LegendWrapper) : Parcelable

接下来,我尝试发送

heroesStatsActivity.putParcelableArrayListExtra("data", testList)

但我得到一个错误

类型不匹配。必需:ArrayList<out Parcelable!>? 找到:测试列表

如果你只写 putExtra

heroesStatsActivity.putExtra("data", testList)

然后第二个活动出错了

val test = intent?.extras?.getParcelable("data")

没有足够的信息来推断类型变量 T

android
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Vadik
    2022-08-22T22:23:22Z2022-08-22T22:23:22Z

    在 Android 中,不同活动之间的所有数据都在一个特殊的Parcel容器中传输。此容器中只能存储某些类型的数据。其中一种类型是Parcelable.

    你在使用putParcelableArrayListExtra,没错,它只需要实现ParcelableTestList接口。为了不手动编写 Parcelable 的实现,可以使用kotlin-parcelize 插件。

    我将举例说明如何使用 kotlin-parcelize 执行此操作:

    1. 我们用注解标记@Parcelize所有将被传输并实现接口的类Parcelable:

      @Parcelize
      class MyExtra(...) : Parcelable
      
    2. 在活动“A”中,我们将对象myExtra放入意图中并启动活动“B”:

      val myExtra: MyExtra = ...
      startActivity(
          Intent(this, ActivityБ::class.java)
              .putExtra("com.example.my_extra", myExtra)
      )
      
    3. 在活动“B”中,我们从意图中拉出这个对象:

      val myExtra = intent.getParcelableExtra<MyExtra>("com.example.my_extra")
      
    • 4

相关问题

  • 来自片段的列表落后于 BottomNavigationView

  • 无法将变量从 Activity 传递到 Fragment

  • 构建与完成的片段略有不同的片段的最佳方法是什么?

  • 如何更改来自服务器的响应中的日期格式?

  • 谷歌地图在应用程序的发布版本中不起作用

  • 材料设计按钮。单击按钮上的可选区域!

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5