当我拖动列表并尝试显示所有列表项时,它给我这样的错误。 这是我在后台工作的AsyncTask。 请给出一些错误的提示.... 这个asyncTask在几秒钟内被服务调用。
@Override
protected ArrayList<HashMap<String, String>> doInBackground(
String... args) {
String url = args[0];
rssItems = rssParser.getRSSFeedItems(url);
FeedDBHandler rssDb = new FeedDBHandler(getApplicationContext());
// RSSItem rssItem;
rssItems.size();
Log.i("size", "size:" + rssItems.size());
for (RSSItem item : rssItems) {
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// Truncating description
String description = item.getDescription();
if (description.length() > 100)
description = description.substring(3, 97) + "..";
// Store in database
rssItem = new RSSItem(item.getTitle(), item.getLink(),
item.getCategory(), description, item.getPubdate());
// check if not exist -notify and insert
if (!rssDb.isExistItem(item.getLink())) {
createNotification(item.getTitle());
rssDb.addFeed(rssItem);
}
createNotification(item.getTitle());
if (map != null) {
map.put(TAG_TITLE, item.getTitle());
map.put(TAG_LINK, item.getLink());
map.put(TAG_CATEGORY, item.getCategory());
map.put(TAG_DESRIPTION, description);
map.put(TAG_PUB_DATE, item.getPubdate());
rssItemList.add(map);
}
}
return rssItemList;
}
@Override
protected void onPostExecute(ArrayList<HashMap<String, String>> rssItemList) {
ListAdapter adapter = new SimpleAdapter(AndroidRSSReaderList.this,
rssItemList, R.layout.rss_item_list_row,
new String[] { TAG_LINK, TAG_TITLE, TAG_DESRIPTION,
TAG_PUB_DATE }, new int[] { R.id.page_url,
R.id.title, R.id.link, R.id.pub_date });
// updating listview
lv.setAdapter(adapter);
lv.deferNotifyDataSetChanged();
// lv.onDataSetChanged();
// dismiss the dialog after getting all products
// pDialog.dismiss();
}
}
提前致谢...
答案 0 :(得分:0)
@Override
protected void onPreExecute() {
super.onPreExecute();
rssItemList.clear();
}
@Override
protected ArrayList<HashMap<String, String>> doInBackground(
String... args) {
// updating UI from Background Thread
FeedDBHandler rssDb = new FeedDBHandler(getApplicationContext());
// listing all RSSItems from SQLite
List<RSSItem> rssList = rssDb.getAllItems();
// loop through each RSSItem
for (int i = 0; i < rssList.size(); i++) {
RSSItem s = rssList.get(i);
// creating new HashMap
HashMap<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => value
map.put(TAG_TITLE, s.getTitle());
map.put(TAG_LINK, s.getLink());
map.put(TAG_CATEGORY, s.getCategory());
map.put(TAG_DESRIPTION, s.getDescription());
map.put(TAG_PUB_DATE, s.getPubdate());
// adding HashList to ArrayList
rssItemList.add(map);
}
return rssItemList;
}
@Override
protected void onPostExecute(final ArrayList<HashMap<String, String>> rssItemList) {
runOnUiThread(new Runnable() {
public void run() {
ListAdapter adapter = new SimpleAdapter(
AndroidRSSReaderList.this, rssItemList,
R.layout.rss_item_list_row, new String[] {
TAG_LINK, TAG_TITLE, TAG_PUB_DATE,
TAG_DESRIPTION }, new int[] {
R.id.page_url, R.id.title, R.id.pub_date,
R.id.link });
// updating listview
setListAdapter(adapter);
}
});
}
我通过一些改变解决了这个问题......