1. Check out our companion app, Forums for Android! Download from Google Play

RSS Reader

Discussion in 'Application Development' started by saurabh44, Jan 28, 2013.

  1. saurabh44

    saurabh44 New Member
    Thread Starter
    25

    Jan 27, 2013
    2
    0
    25
    I am new to android development.I tried this RSS Reader app using some blog.I couldn't figure out the errorin my code.Its showing ANR error.Please help !

    package com.example.simplerssreader;

    import java.io.IOException;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;

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

    import android.app.ListActivity;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;

    public class SimpleRSSReaderActivity extends ListActivity
    {
    List headlines=new ArrayList();
    List links=new ArrayList();



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

    ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, headlines);
    setListAdapter(adapter);

    new PostTask().execute("http://feeds.pcworld.com/pcworld/latestnews");
    }

    @Override

    protected void onListItemClick(ListView l, View v, int position, long id)
    {
    Uri uri = Uri.parse((links.get(position)).toString());
    Intent intent = new Intent(Intent.ACTION_VIEW, uri);
    startActivity(intent);
    }


    private class PostTask extends AsyncTask<String, Integer, String>
    {
    @Override
    protected void onPreExecute() {

    super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params)
    {
    String para=params[0];
    try {

    URL url = new URL(para);

    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    factory.setNamespaceAware(false);
    XmlPullParser xpp = factory.newPullParser();

    // We will get the XML from an input stream

    xpp.setInput(url.openStream(), "UTF_8");



    /* We will parse the XML content looking for the "<title>" tag which appears inside the "<item>" tag.

    * However, we should take in consideration that the rss feed name also is enclosed in a "<title>" tag.

    * As we know, every feed begins with these lines: "<channel><title>Feed_Name</title>...."

    * so we should skip the "<title>" tag which is a child of "<channel>" tag,

    * and take in consideration only "<title>" tag which is a child of "<item>"

    *

    * In order to achieve this, we will make use of a boolean variable.

    */

    boolean insideItem = false;



    // Returns the type of current event: START_TAG, END_TAG, etc..

    int eventType = xpp.getEventType();

    while (eventType != XmlPullParser.END_DOCUMENT) {

    if (eventType == XmlPullParser.START_TAG) {



    if (xpp.getName().equalsIgnoreCase("item")) {

    insideItem = true;

    } else if (xpp.getName().equalsIgnoreCase("title")) {

    if (insideItem)

    headlines.add(xpp.nextText()); //extract the headline

    } else if (xpp.getName().equalsIgnoreCase("link")) {

    if (insideItem)

    links.add(xpp.nextText()); //extract the link of article

    }

    }else if(eventType==XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")){

    insideItem=false;

    }



    eventType = xpp.next(); //move to next element

    }



    } catch (MalformedURLException e) {

    e.printStackTrace();

    } catch (XmlPullParserException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    }

    return "DONE !";

    }



    @Override

    protected void onProgressUpdate(Integer... values) {

    super.onProgressUpdate(values);



    }



    @Override

    protected void onPostExecute(String result) {

    super.onPostExecute(result);

    }

    }


    }
     

    Advertisement

Share This Page

Loading...