Android 使用XMLPull解析器进行RSS链接解析

Android 使用XMLPull解析器进行RSS链接解析,android,xml,parsing,rss,xmlpullparser,Android,Xml,Parsing,Rss,Xmlpullparser,我正在开发一个完全基于RSS提要的应用程序,我想使用XML解析器解析RSS链接,我遵循了一些教程并使用XMLPull解析器实现了一个代码,但当我想解析这个链接时,我得到了正确的响应,但当我想解析这个链接时,解析器没有响应我。。我不知道为什么 我花了一周时间解决这个问题。。请帮帮我 这是我的密码 MainActivity.java package com.rajeshvijayakumar.xmlpullparser; import java.util.ArrayList; i

我正在开发一个完全基于RSS提要的应用程序,我想使用XML解析器解析RSS链接,我遵循了一些教程并使用XMLPull解析器实现了一个代码,但当我想解析这个链接时,我得到了正确的响应,但当我想解析这个链接时,解析器没有响应我。。我不知道为什么

我花了一周时间解决这个问题。。请帮帮我

这是我的密码

MainActivity.java

 package com.rajeshvijayakumar.xmlpullparser;

    import java.util.ArrayList;
    import java.util.List;

    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.os.Handler;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;

    import com.rajeshvijayakumar.model.RSSFeed;
    import com.rajeshvijayakumar.parser.NewsFeedParser;

    public class MainActivity extends Activity implements OnItemClickListener {

        private ListView mRssListView;
        private NewsFeedParser mNewsFeeder;
        private List<RSSFeed> mRssFeedList;
        private RssAdapter mRssAdap;

        private static final String TOPSTORIES ="http://www.pokerlistings.com/feed/blogs";


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.rss_feed_view);

            mRssListView = (ListView) findViewById(R.id.rss_list_view);
            mRssFeedList = new ArrayList<RSSFeed>();
            new DoRssFeedTask().execute(TOPSTORIES);


            mRssListView.setOnItemClickListener(this);
        }

        private class RssAdapter extends ArrayAdapter<RSSFeed> {
            private List<RSSFeed> rssFeedLst;

            public RssAdapter(Context context, int textViewResourceId, List<RSSFeed> rssFeedLst) {
                super(context, textViewResourceId, rssFeedLst);
                this.rssFeedLst = rssFeedLst;
            }

            @Override
            public View getView(int position, View convertView, ViewGroup parent) {

                View view = convertView;
                RssHolder rssHolder = null;
                if (convertView == null) {
                    view = View.inflate(MainActivity.this, R.layout.rss_list_item, null);
                    rssHolder = new RssHolder();
                    rssHolder.rssTitleView = (TextView) view.findViewById(R.id.rss_title_view);
                    view.setTag(rssHolder);
                } else {
                    rssHolder = (RssHolder) view.getTag();
                }
                RSSFeed rssFeed = rssFeedLst.get(position);
                rssHolder.rssTitleView.setText(rssFeed.getTitle());
                return view;
            }
        }

        static class RssHolder {
            public TextView rssTitleView;
        }

        public class DoRssFeedTask extends AsyncTask<String, Void, List<RSSFeed>> {
            ProgressDialog prog;
            String jsonStr = null;
            Handler innerHandler;

            @Override
            protected void onPreExecute() {

                prog = new ProgressDialog(MainActivity.this);
                prog.setMessage("Loading....");
                prog.show();
            }

            @Override
            protected List<RSSFeed> doInBackground(String... params) {


                for (String urlVal : params) {

                    mNewsFeeder = new NewsFeedParser(urlVal);




                }

                mRssFeedList = mNewsFeeder.parse();

                return mRssFeedList;
            }

            @Override
            protected void onPostExecute(List<RSSFeed> result) {
                prog.dismiss();
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        mRssAdap = new RssAdapter(MainActivity.this, R.layout.rss_list_item,
                                mRssFeedList);
                        int count = mRssAdap.getCount();
                        if (count != 0 && mRssAdap != null) {
                            mRssListView.setAdapter(mRssAdap);
                        }
                    }
                });
            }

            @Override
            protected void onProgressUpdate(Void... values) {
            }
        }

        @Override
        public void onItemClick(AdapterView<?> adapterView, View v, int position, long id) {
        }
    }
NewsFeedParser.java

package com.rajeshvijayakumar.parser;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import com.rajeshvijayakumar.model.RSSFeed;

public class NewsFeedParser {
    private InputStream urlStream;
    private XmlPullParserFactory factory;
    private XmlPullParser parser;

    private List<RSSFeed> rssFeedList;
    private RSSFeed rssFeed;

    private String urlString;
    private String tagName;

    private String title;
    private String link;
    private String description;
    private String category;
    private String pubDate;
    private String guid;
    private String feedburner;



    public static final String ITEM = "item";
    public static final String CHANNEL = "channel";

    public static final String TITLE = "title";
    public static final String LINK = "link";
    public static final String DESCRIPTION = "description";
    public static final String CATEGORY = "category";
    public static final String PUBLISHEDDATE = "pubDate";
    public static final String GUID = "guid";
    public static final String FEEDBURNERORIGLINK = "feedburner:origLink";


    public NewsFeedParser(String urlString) {

        this.urlString = urlString;
    }

    public static InputStream downloadUrl(String urlString) throws IOException {



        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.connect();
        InputStream stream = conn.getInputStream();
        return stream;
    }

    public List<RSSFeed> parse() {
        try {


            int count = 0;
            factory = XmlPullParserFactory.newInstance();
            parser = factory.newPullParser();
          //  urlStream = downloadUrl(urlString);

            URL url = new URL("http://www.pokerlistings.com/feed/blogs");   
            parser.setInput(url.openConnection().getInputStream(), "UTF_8");


           // parser.setInput(urlStream, null);

//            URL url = new URL("http://www.rssboard.org/files/sample-rss-2.xml");        
//            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//            factory.setNamespaceAware(false);
//            XmlPullParser xpp = factory.newPullParser();
//            xpp.setInput(url.openConnection().getInputStream(), "UTF_8"); 



            int eventType = parser.getEventType();


            boolean done = false;
            rssFeed = new RSSFeed();
            rssFeedList = new ArrayList<RSSFeed>();
            while (eventType != XmlPullParser.END_DOCUMENT && !done) {
                tagName = parser.getName();

                switch (eventType) {
                    case XmlPullParser.START_DOCUMENT:


                        break;
                    case XmlPullParser.START_TAG:
                        if (tagName.equals(ITEM)) {
                            rssFeed = new RSSFeed();
                        }
                        if (tagName.equals(TITLE)) {
                            title = parser.nextText().toString();
                        }
                        if (tagName.equals(LINK)) {
                            link = parser.nextText().toString();
                        }
                        if (tagName.equals(DESCRIPTION)) {
                            description = parser.nextText().toString();
                        }
                        if (tagName.equals(CATEGORY)) {
                            category = parser.nextText().toString();
                        }
                        if (tagName.equals(PUBLISHEDDATE)) {
                            pubDate = parser.nextText().toString();
                        }
                        if (tagName.equals(GUID)) {
                            guid = parser.nextText().toString();
                        }
                        if (tagName.equals(FEEDBURNERORIGLINK)) {
                            feedburner = parser.nextText().toString();
                        }
                        break;
                    case XmlPullParser.END_TAG:


                        System.out.println(">>>>>>> NewsFeedParser END TAG");

                        if (tagName.equals(CHANNEL)) {
                            done = true;
                        } else if (tagName.equals(ITEM)) {

                            rssFeed = new RSSFeed(title, link, description, category, pubDate,
                                    guid,
                                    feedburner);
                            rssFeedList.add(rssFeed);
                        }
                        break;
                }

                eventType = parser.nextToken();
                //eventType = parser.next();
              //  eventType++;
                System.out.println(">>>>>>> NewsFeedParser parse method event type in ="+eventType);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return rssFeedList;

    }
}
package com.rajeshvijayakumar.parser;
导入java.io.IOException;
导入java.io.InputStream;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.List;
导入org.xmlpull.v1.XmlPullParser;
导入org.xmlpull.v1.XmlPullParserFactory;
导入com.rajeshvijayakumar.model.RSSFeed;
公共类NewsFeedParser{
私有输入流urlStream;
私营工厂;
私有xmlpull解析器;
私有列表rssFeedList;
私人RSSFeed RSSFeed;
私有字符串urlString;
私有字符串标记名;
私有字符串标题;
私有字符串链接;
私有字符串描述;
私有字符串类别;
私有字符串发布日期;
私有字符串guid;
私人串式给料机;
公共静态最终字符串ITEM=“ITEM”;
公共静态最终字符串CHANNEL=“CHANNEL”;
公共静态最终字符串TITLE=“TITLE”;
公共静态最终字符串LINK=“LINK”;
公共静态最终字符串DESCRIPTION=“DESCRIPTION”;
公共静态最终字符串CATEGORY=“CATEGORY”;
公共静态最终字符串PUBLISHEDDATE=“pubDate”;
公共静态最终字符串GUID=“GUID”;
公共静态最终字符串FEEDBURNERORIGLINK=“feedburner:origLink”;
公共NewsFeedParser(字符串urlString){
this.urlString=urlString;
}
公共静态InputStream downloadUrl(字符串urlString)引发IOException{
URL=新URL(URL字符串);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod(“POST”);
conn.setDoInput(真);
连接();
InputStream=conn.getInputStream();
回流;
}
公共列表解析(){
试一试{
整数计数=0;
factory=XmlPullParserFactory.newInstance();
parser=factory.newPullParser();
//urlStream=下载URL(urlString);
URL=新URL(“http://www.pokerlistings.com/feed/blogs");   
setInput(url.openConnection().getInputStream(),“UTF_8”);
//setInput(urlStream,null);
//URL=新URL(“http://www.rssboard.org/files/sample-rss-2.xml");        
//XmlPullParserFactory工厂=XmlPullParserFactory.newInstance();
//factory.setNamespaceAware(false);
//XmlPullParser xpp=factory.newPullParser();
//setInput(url.openConnection().getInputStream(),“UTF_8”);
int eventType=parser.getEventType();
布尔完成=假;
rssFeed=新的rssFeed();
rssFeedList=newarraylist();
while(eventType!=XmlPullParser.END_文档&&!完成){
tagName=parser.getName();
开关(事件类型){
案例XmlPullParser.START_文档:
打破
case XmlPullParser.START_标记:
if(标记名.equals(项)){
rssFeed=新的rssFeed();
}
if(标记名.equals(标题)){
title=parser.nextText().toString();
}
if(标记名.equals(链接)){
link=parser.nextText().toString();
}
if(标记名.equals(说明)){
description=parser.nextText().toString();
}
if(标记名.equals(类别)){
category=parser.nextText().toString();
}
if(标记名.equals(发布日期)){
pubDate=parser.nextText().toString();
}
if(标记名.equals(GUID)){
guid=parser.nextText().toString();
}
if(标记名.equals(FEEDBURNERORIGLINK)){
feedburner=parser.nextText().toString();
}
打破
case XmlPullParser.END_标记:
System.out.println(“>>>>>>>>NewsFeedParser结束标记”);
if(标记名.equals(通道)){
完成=正确;
}else if(标记名.equals(项)){
rssFeed=新rssFeed(标题、链接、描述、类别、发布日期、,
guid,
饲料燃烧器);
添加(rssFeed);
}
打破
}
eventType=parser.nextToken();
//eventType=parser.next();
//eventType++;
System.out.println(“>>>>>>>>NewsFeedParser解析方法事件类型in=“+eventType”);
}
}捕获(例外e){
e、 printStackTrace();
}
返回rssFeedList;
}
}

提前感谢

如果您能在会议期间发布日志,那将非常有帮助call@mach对于答案,我已经在调用期间放置了日志。问题是eventType=parser.next();这一行给出了值“1”,我希望这个值是“2”。我的意思是你应该把日志记录放到你的问题中。我没有得到任何错误或异常,这里是m
package com.rajeshvijayakumar.parser;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import com.rajeshvijayakumar.model.RSSFeed;

public class NewsFeedParser {
    private InputStream urlStream;
    private XmlPullParserFactory factory;
    private XmlPullParser parser;

    private List<RSSFeed> rssFeedList;
    private RSSFeed rssFeed;

    private String urlString;
    private String tagName;

    private String title;
    private String link;
    private String description;
    private String category;
    private String pubDate;
    private String guid;
    private String feedburner;



    public static final String ITEM = "item";
    public static final String CHANNEL = "channel";

    public static final String TITLE = "title";
    public static final String LINK = "link";
    public static final String DESCRIPTION = "description";
    public static final String CATEGORY = "category";
    public static final String PUBLISHEDDATE = "pubDate";
    public static final String GUID = "guid";
    public static final String FEEDBURNERORIGLINK = "feedburner:origLink";


    public NewsFeedParser(String urlString) {

        this.urlString = urlString;
    }

    public static InputStream downloadUrl(String urlString) throws IOException {



        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.connect();
        InputStream stream = conn.getInputStream();
        return stream;
    }

    public List<RSSFeed> parse() {
        try {


            int count = 0;
            factory = XmlPullParserFactory.newInstance();
            parser = factory.newPullParser();
          //  urlStream = downloadUrl(urlString);

            URL url = new URL("http://www.pokerlistings.com/feed/blogs");   
            parser.setInput(url.openConnection().getInputStream(), "UTF_8");


           // parser.setInput(urlStream, null);

//            URL url = new URL("http://www.rssboard.org/files/sample-rss-2.xml");        
//            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//            factory.setNamespaceAware(false);
//            XmlPullParser xpp = factory.newPullParser();
//            xpp.setInput(url.openConnection().getInputStream(), "UTF_8"); 



            int eventType = parser.getEventType();


            boolean done = false;
            rssFeed = new RSSFeed();
            rssFeedList = new ArrayList<RSSFeed>();
            while (eventType != XmlPullParser.END_DOCUMENT && !done) {
                tagName = parser.getName();

                switch (eventType) {
                    case XmlPullParser.START_DOCUMENT:


                        break;
                    case XmlPullParser.START_TAG:
                        if (tagName.equals(ITEM)) {
                            rssFeed = new RSSFeed();
                        }
                        if (tagName.equals(TITLE)) {
                            title = parser.nextText().toString();
                        }
                        if (tagName.equals(LINK)) {
                            link = parser.nextText().toString();
                        }
                        if (tagName.equals(DESCRIPTION)) {
                            description = parser.nextText().toString();
                        }
                        if (tagName.equals(CATEGORY)) {
                            category = parser.nextText().toString();
                        }
                        if (tagName.equals(PUBLISHEDDATE)) {
                            pubDate = parser.nextText().toString();
                        }
                        if (tagName.equals(GUID)) {
                            guid = parser.nextText().toString();
                        }
                        if (tagName.equals(FEEDBURNERORIGLINK)) {
                            feedburner = parser.nextText().toString();
                        }
                        break;
                    case XmlPullParser.END_TAG:


                        System.out.println(">>>>>>> NewsFeedParser END TAG");

                        if (tagName.equals(CHANNEL)) {
                            done = true;
                        } else if (tagName.equals(ITEM)) {

                            rssFeed = new RSSFeed(title, link, description, category, pubDate,
                                    guid,
                                    feedburner);
                            rssFeedList.add(rssFeed);
                        }
                        break;
                }

                eventType = parser.nextToken();
                //eventType = parser.next();
              //  eventType++;
                System.out.println(">>>>>>> NewsFeedParser parse method event type in ="+eventType);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return rssFeedList;

    }
}