AsyncTask is used to execute code NOT in the main (UI) thread. What you are doing is executing the fetch code in the UI thread and trying to set the adapter in a background thread. So first read this and then you can try to move your code around like this:
@Override
protected void onPreExecute() {
super.onPreExecute();
rssItemList.clear();
}
@Override
protected 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());
if (rssItems != null) {
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);
// when updating the adapter call
// adapter.notifyDataSetChanged();
// dismiss the dialog after getting all products
pDialog.dismiss();
}