2014-03-03 2 views
1

사용 CDATA 섹션의 속성을 가져옵니다 그림안드로이드는 XML이 (RSS 피드에서) 다음과 같습니다 XMLPullParser

태그 끝 부분의 기사 요지이지만 실행 중일 때 나는 NullPointer Ex를 얻습니다.

모든 나머지 (잘 CDATA 섹션 작업 외부 ...)

내가 사용하는 코드는 :

if(tagName.equals("description")){ 
    int token = parser.nextToken(); 
    while(token!=XmlPullParser.CDSECT){ 
    token = parser.nextToken(); 
    } 
    String cdata = parser.getText(); 
    Log.i("Info", cdata); 
    String result = cdata.substring(cdata.indexOf("src='")+5, cdata.indexOf("jpg")+3); 
    Log.i("Info", result); 
    pic = getBitmapFromURL(result); 
} 

인가가 :

class BackgroundParser extends AsyncTask<String, String, Integer>{ 
    int headlineCount = 0; 
    String headlineTitle = ""; 
    Bitmap pic = null; 
    String xmlDate = ""; 
    String gist = ""; 
    String articleUrl = ""; 
    @Override 
    protected Integer doInBackground(String... params) { 
     // TODO Auto-generated method stub 
     try { 
      URL rssFeed = new URL(params[0]); 
      XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
      XmlPullParser parser = factory.newPullParser(); 
      InputStream is = rssFeed.openStream(); 
      parser.setInput(is, null); 
      boolean item = false; 
      boolean title = false; 
      boolean date = false; 
      boolean description = false; 
      boolean link = false; 
      String tagName; 
      int eventType = parser.getEventType(); 
      while(eventType!=XmlPullParser.END_DOCUMENT){ 
       if(eventType==XmlPullParser.START_TAG){ 
        tagName = parser.getName(); 
        if(item){ 
         if(tagName.equals("title"))title = true; 
         if(tagName.equals("description")){ 
          String img = parser.getAttributeValue(null, "img src"); 
          Log.i("Info", img); 
          pic = getBitmapFromURL(img); 

         } 
         if(tagName.equals("pubDate"))date = true; 
         if(tagName.equals("description"))description = true; 
         if(tagName.equals("link"))link = true; 
        } 
        else{ 
         if(tagName.equals("item"))item = true; 
        } 
       } 
       if(eventType==XmlPullParser.END_TAG){ 
        tagName = parser.getName(); 
        if(tagName.equals("item")){ 
         item = false; 
         headlines.add(new Headline(headlineTitle,xmlDate,pic,gist,articleUrl)); 
         headlineTitle = null; xmlDate = null; pic = null; gist = null; articleUrl = null; 
         headlineCount++; 
        } 
       } 
       if(eventType==XmlPullParser.TEXT){ 
        if(title){ 
         headlineTitle = parser.getText(); 
         Log.i("Info", headlineTitle); 
         title = false; 
        } 
        if(date){ 
         xmlDate = parser.getText(); 
         Log.i("Info", xmlDate); 
         date = false; 
        } 
        if(description){ 
         gist = parser.getText(); 
         Log.i("info",gist); 
         description = false; 
        } 
        if(link){ 
         articleUrl = parser.getText(); 
         Log.i("info", articleUrl); 
         link = false; 
        } 
       } 
       eventType = parser.next(); 
      } 

답변

1

이것은 내가 무슨 짓을 이 일을하는 더 우아한 방법 ???