I'm developing an app for Android. My app parse an XML remote file and I store the data for the first tag in an ArraList of Maps and the data of the second tag in another ArrayList of Maps. I will post here my XML:
<?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="IRIS" channelLogo="http://indiscrezioni.files.wordpress.com/2010/06/logo_iris.jpg">
</Episode>
<Episode pN="1" episodeNumber="1" transmissionName="Titolo" date="29 Giu 2013" time1="" time2="16:30" channel="La7" channelLogo="http://www.tabaccheriavenza.it/media/logo/la7.jpg">
</Episode>
<Episode pN="1" episodeNumber="2" transmissionName="Titolo" date="01 Lug 2013" time1="14:30" time2="" channel="IRIS" channelLogo="http://indiscrezioni.files.wordpress.com/2010/06/logo_iris.jpg">
</Episode>
<Episode pN="1" episodeNumber="2" transmissionName="Titolo" date="01 Lug 2013" time1="" time2="16:30" channel="la7" channelLogo="http://www.tabaccheriavenza.it/media/logo/la7.jpg">
</Episode>
</Program>
<Program programNumber="2" imgURL="http://mesa.umich.edu/files/mesa/field/image/placeholder2.png" description="Lorem ipsum dolor sit er elit">
<Episode pN="2" episodeNumber="1" transmissionName="Titolo 1" date="30 Giu 2013" time1="13:30" time2="" channel="Rai 1" channelLogo="http://i822.photobucket.com/albums/zz145/Mattelufregn/Loghi%20canali%20tv/70px-Logo_Rai_1_2010svg50x50.png">
</Episode>
<Episode pN="2" episodeNumber="1" transmissionName="Titolo 1" date="30 Giu 2013" time1="" time2="18:30" channel="Rai 5" channelLogo="http://www.tuttotv.info/wp-content/uploads/2011/04/logo_rai5_50.jpg">
</Episode>
<Episode pN="2" episodeNumber="2" transmissionName="Titolo 1" date="01 Lug 2013" time1="13:30" time2="" channel="Rai 1" channelLogo="http://i822.photobucket.com/albums/zz145/Mattelufregn/Loghi%20canali%20tv/70px-Logo_Rai_1_2010svg50x50.png">
</Episode>
<Episode pN="2" episodeNumber="2" transmissionName="Titolo 1" date="01 Lug 2013" time1="" time2="18:30" channel="Rai 5" channelLogo="http://www.tuttotv.info/wp-content/uploads/2011/04/logo_rai5_50.jpg">
</Episode>
</Program>
<Program programNumber="3" imgURL="http://wp.contempographicdesign.com/wp_paramount/wp-content/themes/paramount/images/image_placeholder_lrg.jpg" description="Lorem ipsum dolor sit er elit">
<Episode pN="3" episodeNumber="1" transmissionName="Titolo 2" date="30 Giu 2013" time1="10:30" time2="" channel="Canale 5" channelLogo="http://www.mozaic.qa/logo/canale5.jpg">
</Episode>
<Episode pN="3" episodeNumber="1" transmissionName="Titolo 2" date="30 Giu 2013" time1="" time2="17:30" channel="Italia 1" channelLogo="http://upload.wikimedia.org/wikipedia/it/thumb/3/30/Logo_Italia_1.svg/50px-Logo_Italia_1.svg.png">
</Episode>
<Episode pN="3" episodeNumber="2" transmissionName="Titolo 2" date="01 Lug 2013" time1="10:30" time2="" channel="Canale 5" channelLogo="http://www.mozaic.qa/logo/canale5.jpg">
</Episode>
<Episode pN="3" episodeNumber="2" transmissionName="Titolo 2" date="01 Lug 2013" time1="" time2="17:30" channel="Italia 1" channelLogo="http://upload.wikimedia.org/wikipedia/it/thumb/3/30/Logo_Italia_1.svg/50px-Logo_Italia_1.svg.png">
</Episode>
</Program>
</Programs>
At the end of parsing I've an ArrayList for programs and an ArrayList for Episode. You can see that Programs and Episode have a common field (programNumber and pN), now I need to take the data stored in ArrayList of Episode for the right program. How I can do that? I found on the web this solution:
for (HashMap<String, String> programsMap : programs) {
for (Map.Entry<String, String> entry : programsMap.entrySet()) {
// I added some code here
}
}
How I can solve this problem? Thank you for the suggestion.
String programNumber = "3";
// create the result list (empty initially)
List<Map<String, String>> episodesForProgramNumber = new ArrayList<>();
// loop through all the episodes
for (Map<String, String> episode : allEpisodes) {
// if the current episode has the given program number, add it to the result
if (programNumber.equals(episode.get("pN")) {
episodesForProgramNumber.add(episode);
}
}
But Java is an OO language. You shouldn't use maps to store the data. You should use objects of type Program
and Episode
. With Program
containing a List<Episode>
.
You are thinking relational. In an SQL database you would do something like you intend to. Map the episodes to the program by their key.
I would do this a little more object oriented. Create a Program
and an Episode
class with the same attributes as the elements in your XML structure have. Besides that your Program
class should have a list of episodes (like this: List<Episode> episodes
) where your add all the episodes that belong to the program.
It's true that you need to use object, but I guess that the solution of JB Nizet will works. Next time use object.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.