A quick article on how to remove the first two entries from a RSS feed produced by a bunch of java files collectively known as "SimpleRssReader.
Why?
The original file reads of a feed from PCWorld.com. I adapted this to read a google news rss feed and the first two entries are "<query> - Google News", everytime. This article documents what I did to fix it.
How?
Basic to some but I'm new to the game. I'm trying to remove the first two entries from a news feed from a Google News feed.
Modifying the strings can be done in the PcWorldRssParser.java (without it crashing the app). The gist is to check for a description (the first two items do not have one). The following will also return a publishing date:
Find the List function in:
PcWorldRssParser.java (readFeed) and replace with
copyraw
	
private List<RssItem> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
        parser.require(XmlPullParser.START_TAG, null, "rss");
        String title = null;
        String link = null;
        String date = null;
        String desc = null;
        List<RssItem> items = new ArrayList<RssItem>();
        while (parser.next() != XmlPullParser.END_DOCUMENT) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String name = parser.getName();
            if (name.equals("title")) {
                title = readTitle(parser);
            } else if (name.equals("link")) {
                link = readLink(parser);
            } else if (name.equals("pubDate")) {
                date = readDate(parser);
            } else if (name.equals("description")) {
                desc = readDesc(parser);
            }
                if (title != null && link != null && desc != null) {
                    RssItem item = new RssItem(title, link, date, desc);
                    items.add(item);
                    title = null;
                    link = null;
                    date = null;
                    desc = null;
                }
        }
        return items;
    }
    private String readDate(XmlPullParser parser) throws XmlPullParserException, IOException {
        parser.require(XmlPullParser.START_TAG, ns, "pubDate");
        String date = readText(parser);
        parser.require(XmlPullParser.END_TAG, ns, "pubDate");
        return date;
    }
    private String readDesc(XmlPullParser parser) throws XmlPullParserException, IOException {
        parser.require(XmlPullParser.START_TAG, ns, "description");
        String desc = readText(parser);
        parser.require(XmlPullParser.END_TAG, ns, "description");
        return desc;
    }
	- private List<RssItem> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
- parser.require(XmlPullParser.START_TAG, null, "rss");
- String title = null;
- String link = null;
- String date = null;
- String desc = null;
- List<RssItem> items = new ArrayList<RssItem>();
- while (parser.next() != XmlPullParser.END_DOCUMENT) {
- if (parser.getEventType() != XmlPullParser.START_TAG) {
- continue;
- }
- String name = parser.getName();
- if (name.equals("title")) {
- title = readTitle(parser);
- } else if (name.equals("link")) {
- link = readLink(parser);
- } else if (name.equals("pubDate")) {
- date = readDate(parser);
- } else if (name.equals("description")) {
- desc = readDesc(parser);
- }
- if (title != null && link != null && desc != null) {
- RssItem item = new RssItem(title, link, date, desc);
- items.add(item);
- title = null;
- link = null;
- date = null;
- desc = null;
- }
- }
- return items;
- }
- private String readDate(XmlPullParser parser) throws XmlPullParserException, IOException {
- parser.require(XmlPullParser.START_TAG, ns, "pubDate");
- String date = readText(parser);
- parser.require(XmlPullParser.END_TAG, ns, "pubDate");
- return date;
- }
- private String readDesc(XmlPullParser parser) throws XmlPullParserException, IOException {
- parser.require(XmlPullParser.START_TAG, ns, "description");
- String desc = readText(parser);
- parser.require(XmlPullParser.END_TAG, ns, "description");
- return desc;
- }
Modify for date and description
RssAdapter.java (getView)
copyraw
	
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = View.inflate(context, R.layout.rss_item, null);
            holder = new ViewHolder();
            holder.newsItemTitle = (TextView) convertView.findViewById(R.id.newsItemTitle);
            holder.newsItemDateD = (TextView) convertView.findViewById(R.id.newsItemDateD);
            holder.newsItemDateM = (TextView) convertView.findViewById(R.id.newsItemDateM);
            holder.newsItemDesc = (TextView) convertView.findViewById(R.id.newsItemDesc);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.newsItemTitle.setText(items.get(position).getTitle());
        holder.newsItemDateD.setText(items.get(position).getDate().substring(5, 7));
        holder.newsItemDateM.setText(items.get(position).getDate().substring(8, 11).toUpperCase());
        holder.newsItemDesc.setText(items.get(position).getDesc());
        return convertView;
    }
    static class ViewHolder {
        TextView newsItemTitle;
        TextView newsItemDateD;
        TextView newsItemDateM;
        TextView newsItemDesc;
    }
	- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder holder;
- if (convertView == null) {
- convertView = View.inflate(context, R.layout.rss_item, null);
- holder = new ViewHolder();
- holder.newsItemTitle = (TextView) convertView.findViewById(R.id.newsItemTitle);
- holder.newsItemDateD = (TextView) convertView.findViewById(R.id.newsItemDateD);
- holder.newsItemDateM = (TextView) convertView.findViewById(R.id.newsItemDateM);
- holder.newsItemDesc = (TextView) convertView.findViewById(R.id.newsItemDesc);
- convertView.setTag(holder);
- } else {
- holder = (ViewHolder) convertView.getTag();
- }
- holder.newsItemTitle.setText(items.get(position).getTitle());
- holder.newsItemDateD.setText(items.get(position).getDate().substring(5, 7));
- holder.newsItemDateM.setText(items.get(position).getDate().substring(8, 11).toUpperCase());
- holder.newsItemDesc.setText(items.get(position).getDesc());
- return convertView;
- }
- static class ViewHolder {
- TextView newsItemTitle;
- TextView newsItemDateD;
- TextView newsItemDateM;
- TextView newsItemDesc;
- }
RssItem.java
copyraw
	
public class RssItem {
    private String title;
    private String link;
    private String date;
    private String desc;
    public RssItem(String title, String link, String date, String desc) {
            this.title = title;
            this.link = link;
            this.date = date;
            this.desc = desc;
    }
    public String getTitle() {
        return title;
    }
    public String getLink() {
        return link;
    }
    public String getDate() {
        return date;
    }
    public String getDesc() {
        return desc;
    }
}
	- public class RssItem {
- private String title;
- private String link;
- private String date;
- private String desc;
- public RssItem(String title, String link, String date, String desc) {
- this.title = title;
- this.link = link;
- this.date = date;
- this.desc = desc;
- }
- public String getTitle() {
- return title;
- }
- public String getLink() {
- return link;
- }
- public String getDate() {
- return date;
- }
- public String getDesc() {
- return desc;
- }
- }
My rss_item.xml (reduced down):
copyraw
	
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <TextView
        android:id="@+id/newsItemDateD"
        android:maxLines="1"
        android:gravity="center|bottom"
        android:layout_height="50dip"
        android:layout_width="70dip"
        android:textSize="30sp" />
    <TextView
        android:id="@+id/newsItemDateM"
        android:maxLines="1"
        android:gravity="center|top"
        android:layout_height="30dip"
        android:layout_width="70dip"
        android:layout_below="@+id/newsItemDateD" />
    <TextView
        android:id="@+id/newsItemTitle"
        android:layout_toRightOf="@+id/newsItemDateD"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/newsItemDesc"
        android:layout_alignLeft="@+id/newsItemTitle"
        android:layout_below="@+id/newsItemTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>
	- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
- <TextView
- android:id="@+id/newsItemDateD"
- android:maxLines="1"
- android:gravity="center|bottom"
- android:layout_height="50dip"
- android:layout_width="70dip"
- android:textSize="30sp" />
- <TextView
- android:id="@+id/newsItemDateM"
- android:maxLines="1"
- android:gravity="center|top"
- android:layout_height="30dip"
- android:layout_width="70dip"
- android:layout_below="@+id/newsItemDateD" />
- <TextView
- android:id="@+id/newsItemTitle"
- android:layout_toRightOf="@+id/newsItemDateD"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- <TextView
- android:id="@+id/newsItemDesc"
- android:layout_alignLeft="@+id/newsItemTitle"
- android:layout_below="@+id/newsItemTitle"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content" />
- </RelativeLayout>
Sources:
- Android Research Blog - Creating A Simple RSS Application in Android
- Android Research Blog - Creating a Simple Rss Application in Android (V2)
- Github - Vgrec - SimpleRssReader.java
Category: AndroidOS :: Article: 590
	

 
						  
                 
						  
                 
						  
                 
						  
                 
						  
                 
 
 

 
 
Add comment