【问题标题】:How to cast List to String[] in Android如何在 Android 中将 List 转换为 String[]
【发布时间】:2017-11-18 02:24:57
【问题描述】:

在我的应用程序中,我想使用来自这个库的 ChipView:https://github.com/adroitandroid/ChipCloud
在这个集合列表库中,我应该使用 string[]。
在我的应用程序中,我得到了带有此代码的标签列表:

response.body().getData().getTags()

标签模型是:

@SerializedName("tags")
@Expose
private List<NewsDetailTag> tags = null;
...
public List<NewsDetailTag> getTags() {
    return tags;
}

在上面的库中,我应该使用以下代码添加列表:

chipCloud.addChips(someStringArray);

如何在 android 中将 List 转换为 string[]?

请帮帮我。

【问题讨论】:

标签: android arrays list


【解决方案1】:

试试这个:

String[] newList = yourList.toArray(new String[]);

希望这可行

【讨论】:

    【解决方案2】:

    Java 的 List 有一个非常方便的 toArray() 方法,可用于将 List 转换为相同类型的 Array。

    但是,由于您有 List&lt;NewsDetailTag&gt;,您必须自己构建新数组。

    它看起来像这样:

    String[] strings = new String[](list.size())
    for(int i = 0; i < list.size(); i++) {
        array[i] = list.get(i).getStringField();
    }
    

    其中getStringField()NewsDetailTag 上包含您想要的字符串的任何属性。

    【讨论】:

    • 谢谢你亲爱的朋友,你能用我上面的代码编辑你的代码吗?请。我是业余爱好者,我需要这个。请
    • 我已经尽可能多地为您提供了您发布的代码。如果您想将您的NewsDetailTag s 表示为字符串,您需要确定该字符串表示的样子,这就是您放入数组中的内容。
    【解决方案3】:
    List<NewsLineTag> tags = response.body().getData().getTags();
    List<String> tagStrings = new ArrayList<String>();
    //add some stuff
    for (NewsLineTag tag : tags) {
        tagStrings.add(tag.getSomeTextValueINeed());
    }
    chipCloud.addChips(tagStrings.toArray(new String[0]));
    

    getSomeTextValueINeed() 应替换为某种方法,该方法将为您提供要显示的String

    Converting 'ArrayList<String> to 'String[]' in Java 的副本

    【讨论】:

    • 请用我上面的代码编辑你的代码。请。我是业余的
    • 我使用此代码但显示错误:List&lt;String&gt; list = new ArrayList&lt;String&gt;(); list.addAll(response.body().getData().getTags()); String[] stringArray = list.toArray(new String[0]);
    • 你能用我上面的代码发给我真实的代码吗?请
    • 我已经编辑了代码,以便您可以将其用于您的案例。
    • 感谢我的朋友,但请告诉我这个错误:NewsDetailTag cannot be stored in destination array of type java.lang.String[]
    【解决方案4】:

    根本不需要“转换”!无需浪费内存:)

    看看库的代码,看看ChipCloud.addChips()做了什么:

    public void addChips(String[] labels) {
        for (String label : labels) {
            addChip(label);
        }
    }
    

    它只是遍历数组的元素并使用addChip() 方法单独添加每个字符串。

    在您的代码中,您可以用同样的方式处理列表:

    List<NewsDetailTag> tags;
    String              tagString;
    ChipCloud           chipCloud;
    
    // Get the tags, initialize the chipCloud, etc ...
    
    for (NewsDetailTag tag : tags) {
        tagString = tag.getTheStringFromNewsDetailTag();
        chipCloud.addChip(tagString);
    }
    

    您甚至可以编写自己的扩展 ChipCloud 的类,并添加一个接受 List 参数的方法。

    剩下要做的就是从您的NewsDetailTags 获得String。但看起来它们无论如何都是可序列化的。

    【讨论】:

    • 感谢我的朋友,当使用您的代码时,请向我显示此错误:void com.adroitandroid.chipcloud.ChipCloud.addChip(java.lang.String)' on a null object reference 对于此行:chipCloud.addChip(tagString);。但是当使用这一行时:Log.e("Tag", tag.getName()) 显示来自服务器的所有标签!为什么不设置成chipCloud.addChip(tagString);
    • 朋友能帮帮我吗?
    • 您的ChipCloud 参考是null。您不能在空引用上调用方法。当您在 xml 布局中定义芯片云时,您可以使用 ChipCloud chipCloud = (ChipCloud) this.findViewById(R.id.the_id_of_your_chipcloud); 从活动中获取实例。
    猜你喜欢
    • 2018-06-11
    • 2013-08-26
    • 2022-01-05
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多