简单的RSS阅读器不显示或凝聚内容?

时间:2014-01-20 11:34:24

标签: java android android-asynctask rss sax

我正在努力学习Android教程,对java和android很新。

我一直在itcutct.com上关注asynctask rss阅读器的教程,并且无法在列表视图中显示任何内容。

我想知道这里有人可以帮我解决这个问题。

我将发布以下代码。

MainActivity.java:

package com.example.schoolalerts;

import java.util.List;

import com.example.schoolalerts.data.RSSItem;
import com.example.schoolalerts.util.RSSReader;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

//  public string SchoolName; 
//  public string FeedAddress;
//  public bool FinishedProcessingFeed;
//  public bool ProcessingFeed;
public String FeedURL;

private MainActivity local;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FeedURL = "http://www.llanellitown.com/index.php?format=feed&type=rss";

    // Set View
    setContentView(R.layout.activity_main);

    local = this;

    GetRSSDataTask  task = new GetRSSDataTask();

    task.execute(FeedURL);

    Log.d("SchoolAlerts", Thread.currentThread().getName());

}

private class GetRSSDataTask extends AsyncTask<String, Void, List<RSSItem> > {
    @Override
    protected List<RSSItem> doInBackground(String... urls) {

            Log.d("SchoolAlerts", Thread.currentThread().getName());

            try {
                RSSReader rssReader = new RSSReader(urls[0]);

                return rssReader.getItems();
            } catch (Exception e) {
                Log.e ("SchoolAlerts", e.getMessage());
            }
        return null;
    }

    @Override
    protected void onPostExecute(List<RSSItem> result) {
        ListView rssitems = (ListView) findViewById(R.id.listView1);

        ArrayAdapter<RSSItem> adapter = new ArrayAdapter<RSSItem>(local, android.R.layout.simple_list_item_1, result);

        rssitems.setAdapter(adapter);

        rssitems.setOnItemClickListener(new ListListener(result, local));
    }

}


@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;
}

}

ListListener.java:

package com.example.schoolalerts;

import java.util.List;

import com.example.schoolalerts.data.RSSItem;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;

public class ListListener implements OnItemClickListener {

List<RSSItem> listItems;
Activity activity;

public ListListener(List<RSSItem> listItems, Activity activity) {
    this.listItems = listItems;
    this.activity = activity;
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(listItems.get(pos).getLink()));

    activity.startActivity(i);
}

}

RSSItem.java:

package com.example.schoolalerts.data;


public class RSSItem {

private String Title;
private String Link;


public String getTitle() {
    return Title;
}

public void setTitle(String title) {
    this.Title = title;
}

public String getLink() {
    return Link;
}

public void setLink(String link) {
    this.Link = link;
}

@Override
public String toString() {
    return Title;
}

}

RSSParseHandler.java:

package com.example.schoolalerts.util;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.example.schoolalerts.data.RSSItem;

public class RSSParseHandler extends DefaultHandler {

private List<RSSItem> RSSItem;
private RSSItem currentItem;
private boolean parsingTitle;
private boolean parsingLink;

public RSSParseHandler() {
    RSSItem = new ArrayList<RSSItem>();
}

public List<RSSItem> getItem() {
    return RSSItem;
}


@Override
public void startElement(String uri, String localName, String qName,
        Attributes attributes) throws SAXException {
    if ("Item".equals(qName)) {
        currentItem = new RSSItem();
    } else if ("title".equals(qName)) {
        parsingTitle = true;
    } else if ("link".equals(qName)) {
        parsingLink = true;
    }
}

@Override
public void endElement(String uri, String localName, String qName)
        throws SAXException {
    if ("Item".equals(qName)) {
        RSSItem.add(currentItem);
        currentItem = null;
    } else if ("Title".equals(qName)) {
        parsingTitle = false;
    } else if ("Link".equals(qName)) {
        parsingLink = false;
    }
}

@Override
public void characters(char[] ch, int start, int length)
        throws SAXException {
    if (parsingTitle) {
        if (currentItem != null) {
            currentItem.setTitle(new String(ch, start, length)) ;
        } else if (parsingLink) {
            if (currentItem != null) {
                currentItem.setLink(new String(ch, start, length));
                parsingLink = false;
            }
        }
    }
}   
}

RSSReader.java:

package com.example.schoolalerts.util;

import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import com.example.schoolalerts.data.RSSItem;

public class RSSReader {

private String rssUrl;

public RSSReader(String rssUrl) {
    this.rssUrl = rssUrl;
    System.out.println(rssUrl);
}

public List<RSSItem> getItems() throws Exception {

    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser saxParser = factory.newSAXParser();

    RSSParseHandler handler = new RSSParseHandler();

    saxParser.parse(rssUrl, handler);

    return handler.getItem();
}
}

我感谢任何帮助,只是希望它能起作用...... :(

0 个答案:

没有答案