【问题标题】:How to use Parceler with ArrayList<Map<String, String>>?如何将 Parceler 与 ArrayList<Map<String, String>> 一起使用?
【发布时间】:2018-04-06 17:13:40
【问题描述】:

我正在尝试使用Parceler来传输ArrayList的变量>,但是运行时总是报错,只需链接intent.putParcelableArrayListExtra("votedetail", arrlist);。搜了一下,没有例子,怎么用?提前谢谢你。

【问题讨论】:

  • 请提供有关您收到的错误的更多详细信息。可能与您在ArrayList 中的对象类型有关。如果 ArrayList 包含的对象不是 Parcelables,则无法打包。据我所知,Map&lt;K,V&gt; 的 Android SDK 实现没有实现Parcelable。

标签: arraylist parceler


【解决方案1】:

请查看Android Developer docs上的方法签名:

Intent putParcelableArrayListExtra (String name, ArrayList&lt;? extends Parcelable&gt; value)

ArrayList 中的对象必须是 Parcelables。 据我所知,Map&lt;K,V&gt;(HashMap、SortedMap 等)的 Android SDK 实现没有实现Parcelable。您必须编写自己的实现,它也是Parcelable。

【讨论】:

    【解决方案2】:

    B0Andrew,感谢您的帮助。我终于找到了答案。使用 putParcelableArrayList 来做到这一点。先把

    "Arraylist<Map<String, String>>" 
    

    变成Arraylist(新建一个Arraylist,然后添加变量),然后我可以使用putParcelableArrayList来传输数据。

    【讨论】:

      【解决方案3】:

      Parceler 是一个用于序列化Parcelable 对象的库。不用putParcelableArrayListExtra(),直接用putParcelable()即可:

      List<Map<String, String>> value = new ArrayList<>();
      // Fill out List
      
      intent.putParcelable("votedetail", Parcels.wrap(value));
      

      您可以在接收活动的onCreate 中反序列化:

      List<Map<String, String>> value = intent.getParcelableExtra("votedetail");
      

      您可以在网站上找到有关如何直接使用它的示例:http://parceler.org/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多