2013-07-18 2 views
0

Android 용 앱을 개발 중입니다. 내 응용 프로그램은 XML 원격 파일을 구문 분석하고지도의 Arra 목록에있는 첫 번째 태그의 데이터와 두 번째 태그의 데이터를 다른 ArrayList지도에 저장합니다. 내가 여기 내 XML 게시 할 예정입니다 : 구문 분석의 끝에서Android 용 Java의지도 Arraylist에서지도 가져 오기

<?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의를했습니다. 프로그램과 에피소드에는 공통 필드 (programNumber 및 pN)가 있습니다. 이제 올바른 프로그램을 위해 Episode의 ArrayList에 저장된 데이터를 가져와야합니다. 어떻게 할 수 있습니까?

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

나는이 문제를 해결할 수있는 방법 : 나는 웹에이 솔루션을 찾았나요? 제안 해 주셔서 감사합니다.

+0

100 % 정확하게하려는 것은 아니지만 데이터 모델링을 고려하십시오. 예를 들어'Program'과'Episode' 클래스를 만들고 캡쳐하려는 것을 캡슐화하십시오. 그런 다음'equals'와'hashcode'를 오버라이드하고'contains'와 같은 콜렉션 메소드를 사용할 수 있습니다. –

답변

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 언어입니다. 지도를 사용하여 데이터를 저장하면 안됩니다. 유형이 ProgramEpisode 인 객체를 사용해야합니다. ProgramList<Episode>입니다.

+0

내가 실패하면 개체를 사용하지 않고 해결책을 시도 할 것이다. 나는 프로그램을위한 수업을 사용하고 에피소드를위한 호출을 시도 할 것이다. – lucgian84

1

당신은 관계형이라고 생각하고 있습니다. SQL 데이터베이스에서는 의도 한대로 작업을 수행합니다. 에피소드를 키로 프로그램에 매핑하십시오.

나는 이것을 좀 더 객체 지향적으로 할 것입니다. ProgramEpisode 클래스를 XML 구조의 요소와 동일한 특성을 사용하여 만듭니다. 게다가 Program 클래스에는 프로그램에 속한 모든 에피소드를 추가 할 수있는 에피소드 목록 (예 : List<Episode> episodes)이 있어야합니다.

0

개체를 사용해야하는 것은 사실이지만 JB Nizet의 솔루션이 효과가있을 것입니다. 다음에 객체를 사용하십시오.

관련 문제