我正在努力学习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();
}
}
我感谢任何帮助,只是希望它能起作用...... :(