2012-03-03 3 views
0

내가 원했던 것은 ArrayList의 모든 결과를 수집하고 그 arraylist에서 반복하여 결과를 표시하는 것입니다.하지만 아래 코드를 실행하려고하면 하나의 요소 만 반환합니다 ...안드로이드에서 xml 데이터 구문 분석하기

이 샘플 XML 파일입니다

public class XMLDataCollected { 


    ArrayList<String> names = new ArrayList<String>(); 
    ArrayList<String> vicinities = new ArrayList<String>(); 
    ArrayList<String> types = new ArrayList<String>(); 
    ArrayList<String> lats = new ArrayList<String>(); 
    ArrayList<String> longs = new ArrayList<String>(); 


     String name = null; 
     String vicinity = null; 
     String type = null; 
     String lat = null; 
     String longi = null; 


     public ArrayList<String> getName() { 
      return names; 
     } 
     public void setName(String name) { 
      this.names.add(name); 
      this.name = name; 
      Log.i("This is the name: ", name + "size: " + names.size()); 

     } 
     public ArrayList<String> getVicinity() { 
      return vicinities; 
     } 
     public void setVicinity(String vicinity) { 
      this.vicinities.add(vicinity); 
      this.vicinity = vicinity;   
      Log.i("This is the vicinity: ", vicinity); 
     } 
     public ArrayList<String> getType() { 
      return types; 
     } 
     public void setType(String type) { 
      this.types.add(type); 
      this.type = type; 
      Log.i("This is the type: ", type); 
     } 
     public ArrayList<String> getLat() { 
      return lats; 
     } 
     public void setLat(String lat) { 
      this.lats.add(lat);   
      this.lat = lat; 
      Log.i("This is the latitude: ", lat); 
     } 
     public ArrayList<String> getLongi() { 
      return longs; 
     } 
     public void setLongi(String longi) { 
      this.longs.add(longi);   
      this.longi = longi; 
      Log.i("This is the longitude: ", longi); 
     } 




     public String populate(){ 
      StringBuilder sb = new StringBuilder(); 
      sb.append(getName()); 
      sb.append(getVicinity()); 
      sb.append(getType()); 
      sb.append(getLat()); 
      sb.append(getLongi());  

      return sb.toString(); 
     } 



2. 

public class HandlingXMLStuff extends DefaultHandler { 

    String elementValue = null; 
    Boolean elementOn = false; 
    XMLDataCollected data; 


    public ArrayList<String> getData() { 
     return data.getName(); 
    } 

    @Override 
    public void startElement(String uri, String localName, String qName, 
      Attributes attributes) throws SAXException { 
     // TODO Auto-generated method stub 

      elementOn = true; 

      if (localName.equals("result"))   { 
       data = new XMLDataCollected(); 
      } else if (localName.equals("CD")) { 

      } 
    } 

     @Override 
     public void endElement(String uri, String localName, String qName) 
       throws SAXException { 

      elementOn = false; 

      /** 
      * Sets the values after retrieving the values from the XML tags 
      * */ 
      if (localName.equalsIgnoreCase("name")) 
       data.setName(elementValue); 
      else if (localName.equalsIgnoreCase("vicinity")) 
       data.setVicinity(elementValue); 
      else if (localName.equalsIgnoreCase("type")) 
       data.setType(elementValue); 
      else if (localName.equalsIgnoreCase("lat")) 
       data.setLat(elementValue); 
      else if (localName.equalsIgnoreCase("lng")) 
       data.setLongi(elementValue); 

     } 

    @Override 
    public void characters(char[] ch, int start, int length) 
      throws SAXException { 
     // TODO Auto-generated method stub 
     if (elementOn) { 
      elementValue = new String(ch, start, length); 
      elementOn = false; 
     } 
    } 

} 



3. 



public class XMLParsingActivity extends Activity implements OnClickListener { 

    static final String baseURL = "http://www.google.com/ig/api?weather="; 
    static final String test = ""; 

    TextView tv; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     Button bone = (Button) findViewById(R.id.btnone); 

     tv = (TextView) findViewById(R.id.tvWeather); 
     bone.setOnClickListener(this); 


    } 


    public String buildURL(int lat, int longi){ 
     String url = ""; 
     return url; 
    } 


    @Override 
    public void onClick(View arg0) { 
     // TODO Auto-generated method stub 

     try{ 
      URL website = new URL(test); 


      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser();   
      XMLReader xr = sp.getXMLReader(); 

      HandlingXMLStuff doingWork = new HandlingXMLStuff(); 
      XMLDataCollected xdc = new XMLDataCollected(); 
      xr.setContentHandler(doingWork); 

      xr.parse(new InputSource(website.openStream())); 


      StringBuilder sb = new StringBuilder(); 
      String name = null; 




      for(int index = 0; index < doingWork.getData().size(); index++){ 
       sb.append(doingWork.getData().get(index)); 
       Log.i("test","" + index); 
      } 


//   tv.setText("Name: " + name + "\n" + "Vicinity: " + vicinity + "\n" + "Type: " + type + "\n " 
//     + "Latitude: " + lat + "\n " + "Longitude: " + longi 
//     ); 
      tv.setText("The size: " + sb); 



     }catch(Exception ex){ 
      tv.setText("Error" + ex.toString()); 
     } 

    } 
} 

내가 3 개 수업을 ...

<result> 
    <name>Zaaffran Restaurant - BBQ and GRILL, Darling Harbour</name> 
    <vicinity>Harbourside Centre 10 Darling Drive, Darling Harbour, Sydney</vicinity> 
    <type>restaurant</type> 
    <type>food</type> 
    <type>establishment</type> 
    <geometry> 
    <location> 
    <lat>-33.8719830</lat> 
    <lng>151.1990860</lng> 
    </location> 
    </geometry> 
    <rating>3.9</rating> 
    </result> 

내가 여기 달성하고자하는 결과에 반복하지만 결과의 ArrayList가있다 오직 하나의 엘리 NT ... 코드 최적화 등을 위해

 List<String> names = new ArrayList<String>(); 
     .... 
     .... 

을 다음과 같이

답변

1

이것은 ArrayList<T>를 또한 내가 일반 LIST <T>를 사용하는 것이 좋습니다 당신에게 http://p-xr.com/android-tutorial-how-to-parseread-xml-data-into-android-listview/

편집 도움이 대신해야 ... 좀 도와주세요 후자는 ArrayList<String>에 메모리가 있습니다. 그다지 큰 문제는 아니지만 최적화는 프로그램의 효율성 (시간과 메모리와 관련하여)의 크기를 확인하는 기본 단계입니다.

+0

고마워, 너 괜찮아 ... – scamexdotexe

+0

더 이상 작동하지 않는 링크 :( –

관련 문제