【问题标题】:Combine Multiple string-array from array.xml to one single List将 array.xml 中的多个字符串数组合并到一个列表中
【发布时间】:2015-09-12 18:59:14
【问题描述】:

我在 array.xml 中定义了一些字符串数组,并希望将它们组合成一个列表。我试过这样:

List<String> name_list;
name_list = Arrays.asList(getResources().getStringArray(R.array.name1));
name_list.addAll(Arrays.asList(getResources().getStringArray(R.array.name2)));

但是错误Caused by: java.lang.UnsupportedOperationException

array.xml

<string-array name="name1">
    <item>Peter</item>
    <item>Phooenix</item>
    <item>Ebele</item>
    <item>Alice</item>
</string-array>

<string-array name="name2">
    <item>Olivia</item>
    <item>Tai</item>
</string-array>

【问题讨论】:

    标签: java android arrays xml


    【解决方案1】:

    当您查看Arrays 的Javadoc 时,您可以看到Arrays.asList(...) 返回的List 只是将Array 用作List 的Bridge,因此是固定大小的。

    要解决您的问题,您可以使用以下方法:

    List<String> name_list = new ArrayList<>();
    name_list.addAll(Arrays.asList(getResources().getStringArray(R.array.name1)));
    name_list.addAll(Arrays.asList(getResources().getStringArray(R.array.name2)));
    

    【讨论】:

    • 但是这样做会变成java.lang.NullPointerException
    • @MayWong 使用该代码获得 NPE 的唯一方法是如果 getResources()getStringArray() 返回 null,并且您还没有包含两者的代码,所以我们可以帮不上忙。如果您需要这方面的帮助,请提出一个新问题,因为 问题已得到解答。
    【解决方案2】:

    阅读 Arrays.asList 上的 javadocs:

    返回由指定数组支持的固定大小的列表。

    因此,您不能在代码的第二行调用 addAll。相反,您需要创建自己的列表,并为您自己的列表中的两个数组使用 addAll。

    【讨论】:

    • 您还有其他方法吗?
    • 其他方式可能是将第二行更改为 - name_list = new ArrayList&lt;String&gt;(Arrays.asList(getResources().getStringArray(R.array.name1)));
    猜你喜欢
    • 2015-02-05
    • 1970-01-01
    • 2019-08-06
    • 2020-01-08
    • 2017-01-05
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多