首页 > 解决方案 > 如何将一个子元素值放入 Android 中的 ArrayList 中?

问题描述

我对标记所有元素的 XmlPullParser 事件有困难,但是如何将一个子元素存储到 ArrayList 中?

这是我的 xml 文件:

<site>
    <name>Brake and Break</name>
    <link>https://sampleactivity.000webhostapp.com/lesson_1.mp3</link>
        <set>When teaching my daughter how to drive, I told her if she didn't hit the brake in time she would break the car's side mirror.</set>
        <set>You shouldn’t brake as often as you do. You are going to break your car’s brakes.</set>
        <set>I think this relationship is moving too fast for me. Maybe it's best to just hit the brake than to completely break up.</set>
    <image>https://sampleactivity.000webhostapp.com/stckOvflw.png</image>
</site>

在我的 xml 文件中,我有元素名称SET那么如何将所有设置的元素和属性存储到数组列表中?

这是我的 xmlpullparser.java 代码:

switch (eventType) {
                case XmlPullParser.START_TAG:

                    if (tagname.equalsIgnoreCase(KEY_SITE)) {

                        curStackSite = new StackSite();
                    }
                    break;


                case XmlPullParser.TEXT:

                    curText = xpp.getText();
                    break;


                case XmlPullParser.END_TAG:
                    if (tagname.equalsIgnoreCase(KEY_SITE)) {

                        stackSites.add(curStackSite);
                    } else if (tagname.equalsIgnoreCase(KEY_NAME)) {

                        curStackSite.setName(curText);
                    } else if (tagname.equalsIgnoreCase(KEY_LINK)) {

                        curStackSite.setLink(curText);
                    } else if (tagname.equalsIgnoreCase(KEY_SET)) {
                        ArrayList<String> wew = new ArrayList<String>();
                        wew.add(curText);
                        curStackSite.setAlAbout(wew); <--- How can I store all element to arraylist here?
                        curStackSite.setSet(curText);
                    } else if (tagname.equalsIgnoreCase(KEY_IMAGE_URL)) {

                        curStackSite.setImgUrl(curText);
                    }
                    break;

                default:
                    break;
            }

我已经尝试过对我们进行 dom 解析,但在我的代码中仍然没有太大的作用。

更新:

这是我的堆栈站点值:

public class StackSite {
private String name;
private String link;
private String about;
private List<String> AlAbout;
private String id;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}

public String getLink() {
    return link;
}
public void setLink(String link) {
    this.link = link;
}

public String getAbout() {
    return about;
}
public void setAbout(String about) {this.about = about;}

public List<String> getAlAbout() {
    return AlAbout;
}
public void setAlAbout(List<String> AlAbout) {this.AlAbout = AlAbout;}

@Override
public String toString() {
    return "StackSite [name=" + name + ", link=" + link + ", about="
            + about + ", Array sets=" + AlAbout + "]";
}
}

标签: javaandroidandroid-studio

解决方案


如果StackSite班级有这样的成员:

List<String> allSets;

以及StackSite初始化allSets为空列表的构造函数:

allSets = new ArrayList<>();

然后在您只需添加设置文本的END_TAG情况下:tagName.equalsIgnoreCase(KEY_SET)

curStackSite.allSets.add(curText);

allSets将为每个<set>…&lt;/set>遇到的列表添加一个单独的条目。

在解析allSets列表成员的最后,StackSite包含 0 个或多个集合内容的条目。

至于属性,您可能希望为StackSiteSet包含String集合文本和属性字段的新类创建一个新类,而不是将集合仅视为字符串。

因此,您的END_TAG处理</set>应如下所示:

} else if (tagname.equalsIgnoreCase(KEY_SET)) {
    // Get the list and add another element to it.
    curStackSite.getAlAbout().add(curText);
}

推荐阅读