0

私はAndroid用のアプリを開発しています。私のアプリは XML リモート ファイルを解析し、最初のタグのデータを Maps の ArraList に保存し、2 番目のタグのデータを Maps の別の ArrayList に保存します。ここに私の 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>

解析の最後に、プログラム用の ArrayList とエピソード用の ArrayList があります。Programs と Episode には共通のフィールド (programNumber と pN) があることがわかります。ここで、適切なプログラムの Episode の ArrayList に格納されているデータを取得する必要があります。どうすればそれができますか?私はこの解決策をウェブで見つけました:

for (HashMap<String, String> programsMap : programs) {
    for (Map.Entry<String, String> entry : programsMap.entrySet()) {
   // I added some code here
  }
}

どうすればこの問題を解決できますか? 提案していただきありがとうございます。

4

3 に答える 3

2
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);
    }
}

しかし、Java は OO 言語です。マップを使用してデータを保存しないでください。Programタイプandのオブジェクトを使用する必要がありEpisodeます。をProgram含むとList<Episode>

于 2013-07-18T11:09:16.527 に答える
1

あなたは関係性を考えています。SQL データベースでは、意図したとおりのことを行います。エピソードをキーでプログラムにマップします。

私はこれをもう少しオブジェクト指向にします。XML 構造の要素と同じ属性を持つ と クラスをProgram作成します。Episodeそれに加えて、クラスには、番組に属するすべてのエピソードを追加するProgramエピソードのリスト (次のように: ) が必要です。List<Episode> episodes

于 2013-07-18T11:09:35.243 に答える
0

オブジェクトを使用する必要があるのは事実ですが、JB Nizet のソリューションが機能すると思います。次回はオブジェクトを使用します。

于 2013-07-18T13:20:01.020 に答える