2013-07-26 58 views
1

我正在开发一个Android应用程序。我的应用程序有一个按钮,当我按下此按钮时,我将解析一个XML文件,将此文件的信息放入某个对象中,并将此对象显示在可扩展列表中。 也是我的XML文件中有这样的结构:如何将对象添加到另一个对象的数组java

<?xml version="1.0" encoding="UTF-8"?> 
<Programs> 
    <Program programNumber="1" imgURL="http://www.photovideolife.com/userfiles/Placeholder%2001.jpg" description="Lorem ipsum dolor sit er elit"> 
     <Episode pN="1" episodeNumber="1" transmissionName="Titolo" date="29 Giu 2013" time1="14:30" time2="" channel="Real Time" channelLogo="https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png"> 
     </Episode> 
     <Episode pN="1" episodeNumber="1" transmissionName="Titolo" date="29 Giu 2013" time1="" time2="16:30" channel="DMAX" channelLogo="http://tv.zam.it/canali/dmax.png"> 
     </Episode> 
     <Episode pN="1" episodeNumber="2" transmissionName="Titolo" date="01 Lug 2013" time1="14:30" time2="" channel="Real Time" channelLogo="https://lh6.googleusercontent.com/-XSh-9ngYJu4/ThiY-xl2EeI/AAAAAAAABmc/iz04VpL5hOs/s800/realtime.png"> 
     </Episode> 
     <Episode pN="1" episodeNumber="2" transmissionName="Titolo" date="01 Lug 2013" time1="" time2="16:30" channel="DMAX" channelLogo="http://tv.zam.it/canali/dmax.png"> 
     </Episode> 
    </Program> 
</Programs> 

我做了3对象:集,计划和方案。我张贴在这里实现:

Episode.java

public class Episode { 
    String pN, episodeNumber, transmissionName, date, time1, time2, channel, channelLogo; 

    public String getpN() { 
     return pN; 
    } 

    public void setpN(String pN) { 
     this.pN = pN; 
    } 

    public String getEpisodeNumber() { 
     return episodeNumber; 
    } 

    public void setEpisodeNumber(String episodeNumber) { 
     this.episodeNumber = episodeNumber; 
    } 

    public String getTransmissionName() { 
     return transmissionName; 
    } 

    public void setTransmissionName(String transmissionName) { 
     this.transmissionName = transmissionName; 
    } 

    public String getDate() { 
     return date; 
    } 

    public void setDate(String date) { 
     this.date = date; 
    } 

    public String getTime1() { 
     return time1; 
    } 

    public void setTime1(String time1) { 
     this.time1 = time1; 
    } 

    public String getTime2() { 
     return time2; 
    } 

    public void setTime2(String time2) { 
     this.time2 = time2; 
    } 

    public String getChannel() { 
     return channel; 
    } 

    public void setChannel(String channel) { 
     this.channel = channel; 
    } 

    public String getChannelLogo() { 
     return channelLogo; 
    } 

    public void setChannelLogo(String channelLogo) { 
     this.channelLogo = channelLogo; 
    } 

} 

Program.java

public class Program { 
    public Episode[] episodes; 

    String programNumber, imgUrl, description; 

    public Episode[] getEpisodes() { 
     return episodes; 
    } 

    public void setEpisodes(Episode[] episodes) { 
     this.episodes = episodes; 
    } 

    public String getProgramNumber() { 
     return programNumber; 
    } 

    public void setProgramNumber(String programNumber) { 
     this.programNumber = programNumber; 
    } 

    public String getImgUrl() { 
     return imgUrl; 
    } 

    public void setImgUrl(String imgUrl) { 
     this.imgUrl = imgUrl; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

} 

Programs.java

public class Programs { 
    public Program[] programs; 

    public Program[] getPrograms() { 
     return programs; 
    } 

    public void setPrograms(Program[] programs) { 
     this.programs = programs; 
    } 
} 

为了解析我做了这个类的XML文件:

XmlParser.java

import it.lucgian84.models.Episode; 
import it.lucgian84.models.Program; 
import it.lucgian84.models.Programs; 

import java.io.ByteArrayInputStream; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

import android.renderscript.Element; 
import android.util.Log; 

public class XmlParser { 
    private String xml; 
    private Programs programs; 
    private Program program = new Program(); 
    private Episode episode = new Episode(); 

    public XmlParser(String xml) { 
     this.xml = xml; 
    } 

    public void parseXml() { 
     try { 
      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory 
        .newInstance(); 
      DocumentBuilder documentBuilder = documentBuilderFactory 
        .newDocumentBuilder(); 
      Document document = documentBuilder.parse(new InputSource(
        new ByteArrayInputStream(xml.getBytes("utf-8")))); 
      document.getDocumentElement().normalize(); 
      NodeList nodeList = document.getElementsByTagName("Program"); 
      for (int i = 0; i < nodeList.getLength(); i++) { 
       Node nodeItem = nodeList.item(i); 
       if (nodeItem.getNodeType() == Node.ELEMENT_NODE) { 
        Element element = (Element) nodeItem; 
        program.setProgramNumber(((org.w3c.dom.Element) element) 
          .getAttribute("programNumber")); 
        program.setImgUrl(((org.w3c.dom.Element) element) 
          .getAttribute("imgUrl")); 
        program.setDescription(((org.w3c.dom.Element) element) 
          .getAttribute("description")); 
       } 
      } 
      nodeList = document.getElementsByTagName("Episode"); 
      for (int i = 0; i < nodeList.getLength(); i++) { 
       Node nodeItem = nodeList.item(i); 
       if (nodeItem.getNodeType() == Node.ELEMENT_NODE) { 
        Element element = (Element) nodeItem; 
        episode.setpN(((org.w3c.dom.Element) element) 
           .getAttribute("pN")); 
        episode.setEpisodeNumber(((org.w3c.dom.Element) element) 
          .getAttribute("episodeNumber")); 
        episode.setTransmissionName(((org.w3c.dom.Element) element) 
          .getAttribute("transmissionName")); 
        episode.setDate(((org.w3c.dom.Element) element) 
          .getAttribute("date")); 
        episode.setTime1(((org.w3c.dom.Element) element) 
          .getAttribute("time1")); 
        episode.setTime2(((org.w3c.dom.Element) element) 
          .getAttribute("time2")); 
        episode.setChannel(((org.w3c.dom.Element) element) 
          .getAttribute("channel")); 
        episode.setChannelLogo(((org.w3c.dom.Element) element) 
          .getAttribute("channelLogo")); 
       } 
      } 
     } catch (Exception e) { 
      Log.d("XML", "Exception: " + e); 
     } 
    } 

} 

我不知道如何插入对象集到阵列计划和目标程序到阵列方案。 我希望你能帮我找到这个问题的解决方案。 谢谢

回答

1
List<Programs> programsList = new ArrayList<Programs>(); //create list of Programs 
List<Program> programList = new ArrayList<Program>(); // create list of Program 
programsList.add(new Program()); //object Program to the array Programs 
programList.add(new Episode()); //insert the object Episode to the array Program 

扩大:

与当前实现:

public void parseXml() { 
    try { 
     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory 
       .newInstance(); 
     DocumentBuilder documentBuilder = documentBuilderFactory 
       .newDocumentBuilder(); 
     Document document = documentBuilder.parse(new InputSource(
       new ByteArrayInputStream(xml.getBytes("utf-8")))); 
     document.getDocumentElement().normalize(); 
     NodeList nodeList = document.getElementsByTagName("Program"); 
     for (int i = 0; i < nodeList.getLength(); i++) { 
      Node nodeItem = nodeList.item(i); 
      if (nodeItem.getNodeType() == Node.ELEMENT_NODE) { 
       Element element = (Element) nodeItem; 

       Program program = new Program(); 

       program.setProgramNumber(((org.w3c.dom.Element) element) 
         .getAttribute("programNumber")); 
       program.setImgUrl(((org.w3c.dom.Element) element) 
         .getAttribute("imgUrl")); 
       program.setDescription(((org.w3c.dom.Element) element) 
         .getAttribute("description")); 

       programsList.add(program); 
      } 
     } 
     nodeList = document.getElementsByTagName("Episode"); 
     for (int i = 0; i < nodeList.getLength(); i++) { 
      Node nodeItem = nodeList.item(i); 
      if (nodeItem.getNodeType() == Node.ELEMENT_NODE) { 
       Element element = (Element) nodeItem; 

       Episode episode = new Episode(); //creating new episode object 

       episode.setpN(((org.w3c.dom.Element) element) 
          .getAttribute("pN")); 
       episode.setEpisodeNumber(((org.w3c.dom.Element) element) 
         .getAttribute("episodeNumber")); 
       episode.setTransmissionName(((org.w3c.dom.Element) element) 
         .getAttribute("transmissionName")); 
       episode.setDate(((org.w3c.dom.Element) element) 
         .getAttribute("date")); 
       episode.setTime1(((org.w3c.dom.Element) element) 
         .getAttribute("time1")); 
       episode.setTime2(((org.w3c.dom.Element) element) 
         .getAttribute("time2")); 
       episode.setChannel(((org.w3c.dom.Element) element) 
         .getAttribute("channel")); 
       episode.setChannelLogo(((org.w3c.dom.Element) element) 
         .getAttribute("channelLogo")); 

       programList.add(episode); 
      } 
     } 
    } catch (Exception e) { 
     Log.d("XML", "Exception: " + e); 
    } 
} 

另一种选择:

public void parseXml() { 
    try { 
     DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory 
       .newInstance(); 
     DocumentBuilder documentBuilder = documentBuilderFactory 
       .newDocumentBuilder(); 
     Document document = documentBuilder.parse(new InputSource(
       new ByteArrayInputStream(xml.getBytes("utf-8")))); 
     document.getDocumentElement().normalize(); 
     NodeList nodeList = document.getElementsByTagName("Program"); 
     for (int i = 0; i < nodeList.getLength(); i++) { 
      Node nodeItem = nodeList.item(i); 
      if (nodeItem.getNodeType() == Node.ELEMENT_NODE) { 
       Element element = (Element) nodeItem; 

       String programNumber = ((org.w3c.dom.Element) element) 
         .getAttribute("programNumber"); 
       String imgUrl = ((org.w3c.dom.Element) element) 
          .getAttribute("imgUrl"); 
       String description = ((org.w3c.dom.Element) element) 
           .getAttribute("description"); 

       programsList.add(new Program(programNumber, imgUrl, description)); 
      } 
     } 
     nodeList = document.getElementsByTagName("Episode"); 
     for (int i = 0; i < nodeList.getLength(); i++) { 
      Node nodeItem = nodeList.item(i); 
      if (nodeItem.getNodeType() == Node.ELEMENT_NODE) { 
       Element element = (Element) nodeItem; 

       String pN = ((org.w3c.dom.Element) element) 
          .getAttribute("pN"); 
       String episodeNumber = ((org.w3c.dom.Element) element) 
           .getAttribute("episodeNumber"); 
       String transmissionName = ((org.w3c.dom.Element) element) 
            .getAttribute("transmissionName"); 
       String date = ((org.w3c.dom.Element) element) 
             .getAttribute("date"); 
       String time1 = ((org.w3c.dom.Element) element) 
              .getAttribute("time1"); 
       String time2 = ((org.w3c.dom.Element) element) 
               .getAttribute("time2"); 
       String channel = ((org.w3c.dom.Element) element) 
                .getAttribute("channel"); 
       String channelLogo = ((org.w3c.dom.Element) element) 
                 .getAttribute("channelLogo"); 

       programList.add(new Episode(pN, episodeNumber, transmissionName, date, time1, time2, channel, channelLogo)); 
      } 
     } 
    } catch (Exception e) { 
     Log.d("XML", "Exception: " + e); 
    } 
} 

随着alternatie方法,那么你必须在你的ProgramEpisode类添加特定的构造函数:

public class Program { 
    public Program(String programNumber, String imgUrl, String description){ 
    setProgramNumber(programNumber); 
    setImgUrl(imgUrl); 
    setDescription(description); 
    } 

    ....the rest of your implementation... 
} 


public class Episode { 
    public Episode(String pN, String episodeNumber, String transmissionName, String date, String time1, String time2, String channel, String channelLogo){ 
    setpN(pN); 
    setEpisodeNumber(episodeNumber); 
    setTransmissionName(transmissionName); 
    setDate(date); 
    setTime1(time1); 
    setTime2(time2); 
    setChannel(channel); 
    setChannelLogo(channelLogo); 
    } 

    ....the rest of your implementation... 
} 
  • 我个人更喜欢另一种方法,因为它更OO范式并且更容易阅读(至少对我来说)并且更容易应对未来的变化

  • 代码如下所示:

    1. 对象ProgramEpisode被实例化
    2. 对象ProgramEpisode被填充
    3. 对象ProgramEpisode被添加到列表中
  • 对象可以从该列表通过使用list.get(index)访问并且可以在列表中改变,如:((Program)list.get(index)).setDescription("my new description")和列表将被更新

+0

只是一个问题:在将所有信息插入到对象后应该做的最后2条指令?在我将信息插入到对象程序和这个'programList.add(new Episode());'后,我将信息插入到对象Episode后,我会插入这个'programsList.add(new Program());这是正确的? – lucgian84

+0

@PaoloRobertetti:你是对的。首先要做的是将信息插入到剧集中,然后插曲集合对象需要插入到节目中,最后将节目对象插入到节目集合中。而已 。这里提供的答案将用于您的目的。 –

+0

我试过,但它说我应该使用addAll(...)而不是添加(...) – lucgian84

相关问题