سؤال

I am trying to run a tutorial I found online with this feed address: http://feeds.feedburner.com/TheTechnologyEdge

I am able to run the program just fine when using other RSS feeds, but I specifically need the feed that I listed above. I am sure the solution is relatively simple, but I cannot seem to figure out why this address will not work but others will. Below is the code I am using.

public class SolsticeRSSReaderActivity extends ListActivity

{

@SuppressWarnings("rawtypes")
private List headlines;

@SuppressWarnings("rawtypes")
private List links;

/** Called when the activity is first created. */
@SuppressWarnings(
{ "unchecked", "rawtypes" })
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    headlines = new ArrayList();
    links = new ArrayList();

    try
    {
        URL url = new URL("http://feeds2.feedburner.com/TheTechnologyEdge");

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

        // We will get the XML from an input stream
        xpp.setInput(getInputStream(url), "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();
    }

    // Binding data
    ArrayAdapter adapter = new ArrayAdapter(this,
            android.R.layout.simple_list_item_1, headlines);

    setListAdapter(adapter);

}

/*
 * take as an argument the feed url, and returns the input stream
 */
public InputStream getInputStream(URL url)
{
    try
    {
        return url.openConnection().getInputStream();
    }
    catch (IOException e)
    {
        return null;
    }
}

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

}

After I fixed the Atom issue, when I try to implement my listener I get this error. I tracked it down a bit in debug, and it seems like my uri variable is null and does not contain the html like it does when I was using this as an RSS feed.

10-15 20:10:32.445: E/AndroidRuntime(17621): FATAL EXCEPTION: main
10-15 20:10:32.445: E/AndroidRuntime(17621): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat= }
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1536)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1388)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.app.Activity.startActivityForResult(Activity.java:3195)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.app.Activity.startActivity(Activity.java:3302)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at bmjohns.solstice.SolsticeRSSReaderActivity.onListItemClick(SolsticeRSSReaderActivity.java:142)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.app.ListActivity$2.onItemClick(ListActivity.java:319)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.widget.AdapterView.performItemClick(AdapterView.java:292)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.widget.AbsListView.performItemClick(AbsListView.java:1366)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2995)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.widget.AbsListView$1.run(AbsListView.java:3790)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.os.Handler.handleCallback(Handler.java:605)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.os.Looper.loop(Looper.java:137)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at android.app.ActivityThread.main(ActivityThread.java:4514)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at java.lang.reflect.Method.invokeNative(Native Method)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at java.lang.reflect.Method.invoke(Method.java:511)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
10-15 20:10:32.445: E/AndroidRuntime(17621):    at dalvik.system.NativeStart.main(Native Method)
هل كانت مفيدة؟

المحلول

This URL uses Atom, not RSS. Articles begin/end with

entry

not

item
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top