마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 3.0버전이상 파싱코드 한번 봐주세요!

0 추천

public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  Log.d("parserText","OnCreate");
  //////////////////////////////////////
   new Thread(){
    public void run(){
     try {
      URL url = new URL("http://www.kma.go.kr/XML/weather/sfc_web_map.xml");
      XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
      XmlPullParser parser = parserFactory.newPullParser();
      parser.setInput(url.openStream(),"utf-8");
      
      int parserEvent = parser.getEventType();
      String tag = "ready..!";
      String stnid = "";
      String desc = "";
      String ta = "";
      String region = "";
      while(parserEvent != XmlPullParser.END_DOCUMENT){
       
       switch(parserEvent){
       case XmlPullParser.START_DOCUMENT:
        Log.d("parserText","Parser Start..!");
        break;
        
       case XmlPullParser.START_TAG:
        tag = parser.getName();
        
        if(tag.equals("local")){
         stnid = parser.getAttributeValue(null, "stn_id");
         desc = parser.getAttributeValue(null, "desc");
         ta = parser.getAttributeValue(null, "ta");
         Log.d("parserText", stnid +" : "+ desc +" : "+ ta +" : ");
        }
        break;
        
       case XmlPullParser.TEXT:
        if(tag.equals("local"))
        {
         region = parser.getText();
        }
        break;
       case XmlPullParser.END_TAG:
        if(tag.equals("local")){
         Weather imsi = new Weather(region,desc,ta,stnid);
         weather.add(imsi);
        }
        tag = "nothing";
        break;
        }
       parserEvent = parser.next();
       }
      
     } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      Log.d("parserText","Error");
     }
     Log.d("parserText",weather.get(2).stnid);
     Log.d("parserText",weather.get(2).desc);
     Log.d("parserText",weather.get(2).ta);
     Log.d("parserText",weather.get(2).region);
    
   }
  }.start();
  setListAdapter(new CustomRow(this));
 }

OnCreate코드 부분인데.. 에러로그 보니까 쓰레드에서 작업하는양이 많다고 뜨는대..

and로 돌리면 되고.. 제폰으로 돌리면 안되고... 그런것도 있구요;

작업량을 어떻게 줄일 방법이 없을까요?

쓰레드를 여러개 돌려야 하나요..;

아 그리고.. 기상청에서 날씨를 받아오는대 어쩔때는 지역을 많이 받아오고 어쩔때는 10개도 못받아오더라구요.. 왜그런거죠? ..

 

LuSine (220 포인트) 님이 2013년 7월 26일 질문
LuSine님이 2013년 7월 26일 수정
아참 CoutomRow는 이 코드 밑에다 만든 클레스입니다 ㅎㅎ

1개의 답변

0 추천
파싱하는데 어려움이 있다면 그냥 XPath 를 쓰세요
aucd29 (218,390 포인트) 님이 2013년 7월 26일 답변
...