16

私はアンドロイドが初めてで、Android用のRSSリーダーを構築しようとしています。すべてのクラスと XML ファイルを作成しましたが、必要な出力が得られません。メッセージを表示しているだけです No RSS feed available

誰かが私が何をすべきかを提案してください。

これは、チュートリアルから取得して操作しようとしたコードです-

public final String RSSFEEDOFCHOICE = "http://blog.01synergy.com/feed/";

public final String tag = "RSSReader";
private RSSFeed feed = null;

/** Called when the activity is first created. */

public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.main);

    // go get our feed!
    feed = getFeed(RSSFEEDOFCHOICE);

    // display UI
    UpdateDisplay();

}


private RSSFeed getFeed(String urlToRssFeed)
{
    try
    {
        // setup the url
       URL url = new URL(urlToRssFeed);

       // create the factory
       SAXParserFactory factory = SAXParserFactory.newInstance();
       // create a parser
       SAXParser parser = factory.newSAXParser();

       // create the reader (scanner)
       XMLReader xmlreader = parser.getXMLReader();
       // instantiate our handler
       RSSHandler theRssHandler = new RSSHandler();
       // assign our handler
       xmlreader.setContentHandler(theRssHandler);
       // get our data via the url class
       InputSource is = new InputSource(url.openStream());
       // perform the synchronous parse           
       xmlreader.parse(is);
       // get the results - should be a fully populated RSSFeed instance, or null on error
       return theRssHandler.getFeed();
    }
    catch (Exception ee)
    {
        // if we have a problem, simply return null
        return null;
    }
}
public boolean onCreateOptionsMenu(Menu menu) 
{
    super.onCreateOptionsMenu(menu);

    menu.add(0,0,0, "Choose RSS Feed");
    menu.add(0,1,0, "Refresh");
    Log.i(tag,"onCreateOptionsMenu");
    return true;
}

public boolean onOptionsItemSelected(Menu item){
    switch (((View) item).getId()) {
    case 0:

        Log.i(tag,"Set RSS Feed");
        return true;
    case 1:
        Log.i(tag,"Refreshing RSS Feed");
        return true;
    }
    return false;
}


private void UpdateDisplay()
{
    TextView feedtitle = (TextView) findViewById(R.id.feedtitle);
    TextView feedpubdate = (TextView) findViewById(R.id.feedpubdate);
    ListView itemlist = (ListView) findViewById(R.id.itemlist);


    if (feed == null)
    {
        feedtitle.setText("No RSS Feed Available");
        return;
    }

    feedtitle.setText(feed.getTitle());
    feedpubdate.setText(feed.getPubDate());

    ArrayAdapter<RSSItem> adapter = new ArrayAdapter<RSSItem>(this,android.R.layout.simple_list_item_1,feed.getAllItems());

    itemlist.setAdapter(adapter);

    itemlist.setOnItemClickListener(this);

    itemlist.setSelection(0);

}


 public void onItemClick(AdapterView parent, View v, int position, long id)
 {
     Log.i(tag,"item clicked! [" + feed.getItem(position).getTitle() + "]");

     Intent itemintent = new Intent(this,ShowDescription.class);

     Bundle b = new Bundle();
     b.putString("title", feed.getItem(position).getTitle());
     b.putString("description", feed.getItem(position).getDescription());
     b.putString("link", feed.getItem(position).getLink());
     b.putString("pubdate", feed.getItem(position).getPubDate());

     itemintent.putExtra("android.intent.extra.INTENT", b);

     startSubActivity(itemintent,0);
 }


private void startSubActivity(Intent itemintent, int i) {
    // TODO Auto-generated method stub

}

}
4

5 に答える 5

5

次のリンクを確認してください. Android 用のオープン ソース RSS リーダーです. 参照用のコードをダウンロードできます.

http://code.google.com/p/android-rss/

于 2011-05-23T07:19:34.497 に答える
4

There is a tutorial (including complete source code) on how to build an Android RSS reder here:

part 1 (complete application)

part 2 (application updated to parse image tags from desciption)

part 3 (application update with Android 3.0)

The tutorial uses SAX parser and includes a complete Android project that accesses an RSS feed and then displays the feed in a list view.

There still seems to be a lot of people interested in this - so if you are looking for an Android 3.0+ with fragments/async tasks etc, as well as complete application code, I have updated the posts again, and they can be found here!

于 2011-05-30T10:49:26.100 に答える
0

このタイプの Rss フィードを簡単に解析するにはXmlPullParser

<code>XmlPullParser</code> を使用して、このタイプの Rss フィードを簡単に解析できます

     public class RSSParser {

public static ArrayList<Pojo> getParserData(String Data){
    try {
        RSSXMLTag currentTag = null;
        ArrayList<Pojo> postDataList = new ArrayList<>();
        XmlPullParserFactory factory = XmlPullParserFactory
                .newInstance();
        factory.setNamespaceAware(true);
        XmlPullParser xpp = factory.newPullParser();
        xpp.setInput(new StringReader(Data));

        int eventType = xpp.getEventType();
        Pojo pdData = null;
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "EEEE, DD MMM yyyy ");
        while (eventType != XmlPullParser.END_DOCUMENT) {
            int i = 0;
            if (eventType == XmlPullParser.START_DOCUMENT) {

            } else if (eventType == XmlPullParser.START_TAG) {
                if (xpp.getName().equals("item")) {

                    pdData = new Pojo();

                    currentTag = RSSXMLTag.IGNORETAG;
                } else if (xpp.getName().equals("title")) {
                    currentTag = RSSXMLTag.TITLE;
                } else if (xpp.getName().equals("link")) {
                    currentTag = RSSXMLTag.LINK;
                } else if (xpp.getName().equals("pubDate")) {
                    currentTag = RSSXMLTag.DATE;
                } else if (xpp.getName().equals("creator")) {

                    currentTag = RSSXMLTag.CREATOR;
                } else if (xpp.getName().equals("category")) {
                    currentTag = RSSXMLTag.CATEGORY;
                } else if (xpp.getName().equals("description")) {
                    currentTag = RSSXMLTag.DESCRIPTION;
                }
            } else if (eventType == XmlPullParser.END_TAG) {
                if (xpp.getName().equals("item")) {
                    // format the data here, otherwise format data in
                    // Adapter
                    Date postDate = dateFormat.parse(pdData.postDate);
                    pdData.postDate = dateFormat.format(postDate);
                    postDataList.add(pdData);
                } else {
                    currentTag = RSSXMLTag.IGNORETAG;
                }
            } else if (eventType == XmlPullParser.TEXT) {
                String content = xpp.getText();
                content = content.trim();
                Log.d("debug", content);
                if (pdData != null) {
                    switch (currentTag) {
                        case TITLE:
                            if (content.length() != 0) {
                                if (pdData.postTitle != null) {
                                    pdData.postTitle += content;
                                } else {
                                    pdData.postTitle = content;
                                }
                            }
                            break;
                        case LINK:
                            if (content.length() != 0) {
                                if (pdData.postLink != null) {
                                    pdData.postLink += content;
                                } else {
                                    pdData.postLink = content;
                                }
                            }
                            break;
                        case DATE:
                            if (content.length() != 0) {
                                if (pdData.postDate != null) {
                                    pdData.postDate += content;
                                } else {
                                    pdData.postDate = content;
                                }
                            }
                            break;
                        case CATEGORY:
                            if (content.length() != 0) {
                                if (pdData.postCategory != null) {
                                    i = i + 1;
                                    if (i == 1) {
                                        pdData.postCategory = content;
                                    }
                                } else {
                                    i = i + 1;
                                    if (i == 1) {
                                        pdData.postCategory = content;
                                    }
                                }
                            }
                            break;
                        case DESCRIPTION:
                            if (content.length() != 0) {
                                if (pdData.postDescription != null) {
                                    String s = content;

                                    String string = s.substring(s.indexOf("src=\"") + 5, s.indexOf("\" class=\""));
                                    pdData.postDescription += string;
                                } else {
                                    String s = content;

                                    String string = s.substring(s.indexOf("src=\"") + 5, s.indexOf("\" class=\""));
                                    pdData.postDescription = string;
                                }
                            }
                            break;
                        case CREATOR:
                            if (content.length() != 0) {
                                if (pdData.postCreator != null) {
                                    pdData.postCreator += content;
                                } else {
                                    pdData.postCreator = content;
                                }
                            }
                            break;
                        default:
                            break;
                    }
                }
            }

            eventType = xpp.next();
        }
        return postDataList;
    }catch (Exception e){
        e.printStackTrace();
    }

    return null;
}

public enum RSSXMLTag {
    IGNORETAG, TITLE, LINK, DATE,CREATOR,CATEGORY, DESCRIPTION;
}


public class Pojo {


public String getPostTitle() {
    return postTitle;
}

public void setPostTitle(String postTitle) {
    this.postTitle = postTitle;
}

public String getPostLink() {
    return postLink;
}

public void setPostLink(String postLink) {
    this.postLink = postLink;
}

public String getPostDate() {
    return postDate;
}

public void setPostDate(String postDate) {
    this.postDate = postDate;
}

public String getPostCategory() {
    return postCategory;
}

public void setPostCategory(String postCategory) {
    this.postCategory = postCategory;
}

public String getPostDescription() {
    return postDescription;
}

public void setPostDescription(String postDescription) {
    this.postDescription = postDescription;
}

public String getPostCreator() {
    return postCreator;
}

public void setPostCreator(String postCreator) {
    this.postCreator = postCreator;
}

public String postTitle;

public String postLink;

public String postDate;

public String postCategory;

public String postDescription;
public String postCreator;
}


}
于 2016-01-26T18:16:35.700 に答える