2013-07-09 2 views
0

왜 예외가 발생하는지 잘 모르겠습니다. 제가하려는 것은 문서의 첫 번째 설명 태그를 얻는 것입니다 ("이번 주 최고의 트랙"이 될 것입니다).XML pullparser 예외

package com.example.rssparser; 

import java.io.IOException; 
import java.io.InputStream; 
import java.net.MalformedURLException; 
import java.net.URL; 

import org.xml.sax.InputSource; 
import org.xmlpull.v1.XmlPullParser; 

import com.example.rssparser.R; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Activity; 
import android.util.Xml; 
import android.view.Menu; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     try{ 
      new Parse().execute(new URL("http://staging.satelliterecords.com/hot_picks/rss")); 
     }catch(MalformedURLException e){ 
      Toast.makeText(this, "Error: Malformed URL", Toast.LENGTH_LONG).show(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 
    public String parseInputSource(InputSource inputSource) throws Exception{ 
     XmlPullParser parser = Xml.newPullParser(); 
     parser.setInput(inputSource.getCharacterStream()); 
     int eventType = parser.getEventType(); 
     String description = ""; 
     while (eventType != XmlPullParser.END_DOCUMENT) { 
      switch (eventType){ 
      case XmlPullParser.START_DOCUMENT: 
       break; 
      case XmlPullParser.START_TAG: 
       String tagName = parser.getName(); 
       if (tagName.equalsIgnoreCase("description")){ 
        description = parser.nextText(); 
        return description; 
       } 
       break; 
      default: 
       break; 
      } 
      eventType = parser.next(); 

     } 
    throw new RuntimeException("No description tag found in XML document"); 
    } 

    private class Parse extends AsyncTask<URL, Void, String>{ 

     protected String doInBackground(URL...url){ 
      try{ 
       InputSource inputSource = new InputSource(url[0].openStream()); 
       String result = parseInputSource(inputSource); 
       return result; 
      }catch(IOException e){ 
       return "Error IO"; 
      }catch(Exception e){ 
       return "Error PullParser"; 
      } 
     } 
     protected void onPostExecute(String result) { 
      TextView txt = (TextView) findViewById(R.id.helloyo); 
      txt.setText(result); 
     } 

    } 

} 

텍스트 영역에 "Error PullParser"가 출력됩니다. 나는 상대적으로 Java에 익숙하지 않으며 Android dev에 더 새로운 것입니다. 따라서 오류 처리 기술은 아마 좋지 않습니다. 또한 LogCat을 읽는 방법을 모르므로 응답이 숨겨져 있는지 확실하지 않습니다.

+1

매니페스트 파일에 인터넷 권한이 추가되었습니다. – Aravin

+0

네, 인터넷 사용 권한이 있습니다. –

+0

샘플 xml 파싱이 필요합니다. – Aravin

답변

0

와우. 그래서 예외를 오류 메시지를 보내고 LogCat에서 찾도록 만드는 방법을 알아 냈습니다. 어떤 이유로 "setInput"메소드를 인식하지 못했습니다. InputSource를 InputStream으로 변경하고 setInput 메소드를 변경 한 parser.setInput(inputStream, "UTF-8"); 으로 변경했습니다.

XMLPullParser API는 setInput 메서드가 하나의 매개 변수 (스트림) 만 사용한다고 주장하지만 혼란 스럽습니다. http://www.xmlpull.org/v1/doc/api/org/xmlpull/v1/XmlPullParser.html#setInput%28java.io.Reader%29