Android 无法从网页的源代码(通过查看源代码)分析XML数据

Android 无法从网页的源代码(通过查看源代码)分析XML数据,android,xml,rss,android-xmlpullparser,Android,Xml,Rss,Android Xmlpullparser,我一直在开发RSS阅读器应用程序。到目前为止,我已经学会了从web解析xml数据并显示所需的数据。我使用Derek Banas的《忙碌的程序员指南》和教程来研究这个主题,并构建了一个股票报价阅读器 无论如何,我想创建一个RSS阅读器来阅读一些新闻网站的提要。问题是(据我所知),当我从中单击RSS链接时,网页会呈现xml本身(如果我在这一点上出错,请纠正我)。所以我右键单击并使用“查看源代码”从源代码中获取xml 现在,在编辑一些代码并尝试使用教程中的链接以确认我的程序运行正常后,我使用了新的查看

我一直在开发RSS阅读器应用程序。到目前为止,我已经学会了从web解析xml数据并显示所需的数据。我使用Derek Banas的《忙碌的程序员指南》和教程来研究这个主题,并构建了一个股票报价阅读器

无论如何,我想创建一个RSS阅读器来阅读一些新闻网站的提要。问题是(据我所知),当我从中单击RSS链接时,网页会呈现xml本身(如果我在这一点上出错,请纠正我)。所以我右键单击并使用“查看源代码”从源代码中获取xml

现在,在编辑一些代码并尝试使用教程中的链接以确认我的程序运行正常后,我使用了新的查看源url,但应用程序停止工作

通过doInBackground中的try-catch块,我得到了异常——“java.net.malformedurexception:Unknown protocol:view=source”

那么,有没有一种方法可以读取这个异常的句柄并让解析器读取xml文件呢? 谢谢,这是我的板球活动代码。在MainActivity中按下按钮时调用

package com.example.try_rssfeed;


public class CricketActivity extends ListActivity {



private static final String TAG = "CRICKET"; // For Logcat

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Log.d(TAG, "onCreate");

    setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>()));


    final String cricketURL = "view-source:http://timesofindia.feedsportal.com/c/33039/f/533920/index.rss";

    ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
        new MyAsyncTask().execute(cricketURL);
    } else {
        Log.d(TAG, "No network connection available.");
    }

}

private class MyAsyncTask extends AsyncTask<String, String, Void> {
@Override
    protected Void doInBackground(String... args) {
        Log.d(TAG, "In doBackground ");
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            XmlPullParser xpp = factory.newPullParser();

            InputStream streamUrl = loadXmlFromNetwork(args[0]);
            Log.d(TAG, "stream " + streamUrl.toString());
            xpp.setInput(streamUrl, null);

            Log.d(TAG, "After setInput " + xpp.getEventType());

            int count = 1; // For Logcat

            do {
                Log.d(TAG, "in While " + count);
                if (xpp.getEventType() == XmlPullParser.START_TAG && xpp.getName().equals("title")) {
                    xpp.next();
                    Log.d(TAG, xpp.getEventType() + "____" + count++);
                    publishProgress(xpp.getText());
                }
                xpp.next();
            } while (xpp.getEventType() != XmlPullParser.END_DOCUMENT);

        } catch (Throwable t) {
            Log.d(TAG, t.toString());               // <-------------- THIS THROWS EXCEPTION
        }
        return null;
    }

    private InputStream loadXmlFromNetwork(String urlString) throws XmlPullParserException, IOException {
        Log.d(TAG, "LoadXML");

        InputStream stream = null;
        try {
            Log.d(TAG, "LoadXML Try " + urlString);

            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setReadTimeout(10000 /* milliseconds */);
            conn.setConnectTimeout(15000 /* milliseconds */);
            conn.setRequestMethod("GET");
            conn.setDoInput(true);
            // Starts the query
            conn.connect();
            stream = conn.getInputStream();

            // Log.d(TAG, "stream "+stream.toString());
        } finally {
        }

        return stream;

    }

    protected void onProgressUpdate(String... values) {
        Log.d(TAG, "In ProgressUpdate");
        ((ArrayAdapter<String>) getListAdapter()).add(values[0]);
    }

    @Override
    protected void onPostExecute(Void result) {
        Log.d(TAG, "===================");
        Log.d(TAG, "DONE DONE DONE DONE");
    }
}
package com.example.try\u rssfeed;
公共类活动扩展了ListActivity{
专用静态最终字符串TAG=“CRICKET”//用于Logcat
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(标记为“onCreate”);
setListAdapter(新的ArrayAdapter(这个,android.R.layout.simple_list_item_1,新的ArrayList());
最终字符串cricketURL=“查看源:http://timesofindia.feedsportal.com/c/33039/f/533920/index.rss";
ConnectivityManager connMgr=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_服务);
NetworkInfo NetworkInfo=connMgr.getActiveNetworkInfo();
if(networkInfo!=null&&networkInfo.isConnected()){
新建MyAsyncTask().execute(URL);
}否则{
Log.d(标记“无可用网络连接”);
}
}
私有类MyAsyncTask扩展了AsyncTask{
@凌驾
受保护的Void doInBackground(字符串…args){
Log.d(标签“在doBackground”);
试一试{
XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser xpp=factory.newPullParser();
InputStreamURL=loadXmlFromNetwork(args[0]);
Log.d(标记“stream”+streamUrl.toString());
setInput(streamUrl,null);
d(标记“在setInput之后”+xpp.getEventType());
int count=1;//对于Logcat
做{
Log.d(标记“in While”+计数);
if(xpp.getEventType()==XmlPullParser.START_标记&&xpp.getName().equals(“title”)){
xpp.next();
Log.d(标记,xpp.getEventType()+“\uuuuuuuuuuuuuuuuuuuuuuuu”+计数++);
publishProgress(xpp.getText());
}
xpp.next();
}while(xpp.getEventType()!=XmlPullParser.END_文档);
}捕获(可丢弃的t){
Log.d(TAG,t.toString())//