XML pullparser异常

时间:2013-07-09 16:03:14

标签: android exception xmlpullparser

我不知道为什么我会得到例外。我要做的就是获取文档的第一个描述标记(最终应该是“本周最佳曲目”)。

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 个答案:

答案 0 :(得分: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