I am trying to implement very simple RSS parser using this RSS parsing library According to the implementation all i have to do is paste the sample code provided, once I import the code as a library.
Steps I have taken:
Download the zip file from the link provided above.
Create new project from existing code
Add the added project as a library to my project.
Add the example code from the link provided above and modify it with try and catch statements and add textview as the output for the title from the rss feed.
Try and run the application. It crashes.
Is it because the library is quite old? Have I done something incorrectly? Any help greatly appreciated.
CODE:
package com.example.rssparser;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import org.xml.sax.SAXException;
import nl.matshofman.saxrssreader.RssFeed;
import nl.matshofman.saxrssreader.RssItem;
import nl.matshofman.saxrssreader.RssReader;
import android.app.Activity;
import android.os.Bundle;
//import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
TextView rss_feed_data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
URL url;
try {
url = new URL("http://wwwnc.cdc.gov/travel/rss/notices.xml");
RssFeed feed;
try {
feed = RssReader.read(url);
ArrayList<RssItem> rssItems = feed.getRssItems();
for(RssItem rssItem : rssItems) {
//Log.i("RSS Reader", rssItem.getTitle());
rss_feed_data = (TextView) findViewById(R.id.rss_feed_data);
rss_feed_data.setText(rssItem.getTitle());
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
LOGCAT OUTPUT:
11-20 04:01:36.901: E/Trace(16331): error opening trace file: No such file or directory (2)
11-20 04:01:37.088: W/dalvikvm(16331): threadid=1: thread exiting with uncaught exception (group=0x41269908)
11-20 04:01:37.138: E/AndroidRuntime(16331): FATAL EXCEPTION: main
11-20 04:01:37.138: E/AndroidRuntime(16331): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.rssparser/com.example.rssparser.MainActivity}: android.os.NetworkOnMainThreadException
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2234)
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.app.ActivityThread.access$600(ActivityThread.java:181)
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1332)
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.os.Handler.dispatchMessage(Handler.java:99)
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.os.Looper.loop(Looper.java:153)
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.app.ActivityThread.main(ActivityThread.java:5037)
11-20 04:01:37.138: E/AndroidRuntime(16331): at java.lang.reflect.Method.invokeNative(Native Method)
11-20 04:01:37.138: E/AndroidRuntime(16331): at java.lang.reflect.Method.invoke(Method.java:511)
11-20 04:01:37.138: E/AndroidRuntime(16331): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:825)
11-20 04:01:37.138: E/AndroidRuntime(16331): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:588)
11-20 04:01:37.138: E/AndroidRuntime(16331): at dalvik.system.NativeStart.main(Native Method)
11-20 04:01:37.138: E/AndroidRuntime(16331): Caused by: android.os.NetworkOnMainThreadException
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1125)
11-20 04:01:37.138: E/AndroidRuntime(16331): at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
11-20 04:01:37.138: E/AndroidRuntime(16331): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
11-20 04:01:37.138: E/AndroidRuntime(16331): at java.net.InetAddress.getAllByName(InetAddress.java:214)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:292)
11-20 04:01:37.138: E/AndroidRuntime(16331): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:185)
11-20 04:01:37.138: E/AndroidRuntime(16331): at java.net.URL.openStream(URL.java:462)
11-20 04:01:37.138: E/AndroidRuntime(16331): at nl.matshofman.saxrssreader.RssReader.read(RssReader.java:35)
11-20 04:01:37.138: E/AndroidRuntime(16331): at com.example.rssparser.MainActivity.onCreate(MainActivity.java:29)
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.app.Activity.performCreate(Activity.java:5020)
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
11-20 04:01:37.138: E/AndroidRuntime(16331): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198)
11-20 04:01:37.138: E/AndroidRuntime(16331): ... 11 more
Updated Code
package com.example.rssparser;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import nl.matshofman.saxrssreader.RssFeed;
import nl.matshofman.saxrssreader.RssItem;
import nl.matshofman.saxrssreader.RssReader;
import org.xml.sax.SAXException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.widget.TextView;
//import android.util.Log;
public class MainActivity extends Activity {
TextView rss_feed_data;
String ur = "http://wwwnc.cdc.gov/travel/rss/notices.xml";
ProgressDialog pDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rss_feed_data = (TextView) findViewById(R.id.rss_feed_data);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
new XmlParsing(ur).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new String[]{null});
else
new XmlParsing(ur).execute(new String[]{null});
}
public class XmlParsing extends AsyncTask<String, String, ArrayList<RssItem>> {
// variables passed in:
String urls;
// constructor
public XmlParsing(String urls) {
this.urls = urls;
}
@Override
protected void onPreExecute() {
pDialog = ProgressDialog.show(MainActivity.this, "Fetching Details..", "Please wait...", true);
}
@Override
protected ArrayList<RssItem> doInBackground(String... params) {
// TODO Auto-generated method stub
URL url;
try {
url = new URL(urls);
RssFeed feed;
try {
feed = RssReader.read(url);
ArrayList<RssItem> rssItems = feed.getRssItems();
return rssItems;
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace(); }
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String result, ArrayList<RssItem> rssItems) {
// Now we have your JSONObject, play around with it.
if (pDialog.isShowing())
pDialog.dismiss();
for(RssItem rssItem : rssItems) {
//Log.i("RSS Reader", rssItem.getTitle());
rss_feed_data.setText(rssItem.getTitle());
}
}
}
}