ここで、生成されたリストをクリックするとエラーが発生します。
これが私のスタックトレースです。
java.lang.IllegalStateException: アダプターの内容が変更されましたが、ListView は通知を受け取りませんでした。アダプターのコンテンツがバックグラウンド スレッドからではなく、UI スレッドからのみ変更されていることを確認してください。[ListView(2131034118、class android.widget.ListView) with Adapter(class android.widget.SimpleAdapter)]
これはコードの初期化です。
ArrayList<HashMap<String, String>> rssItemList = new ArrayList<HashMap<String, String>>();
List<RSSItem> rssItems = new ArrayList<RSSItem>();
RSSItem rssItem;
RSSParser rssParser = new RSSParser();
そして、これはエラーを出す私のクラスです。
@Override
protected void onPreExecute() {
super.onPreExecute();
rssItemList.clear();
}
@Override
protected String doInBackground(String... args) {
String url = args[0];
rssItems = rssParser.getRSSFeedItems(url);
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
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);
}
}
/**
* Updating parsed items into listview
* */
// runOnUiThread(new Runnable() {
// public void run() {
// adding HashList to ArrayList
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);
// registerForContextMenu(lv);
// setListAdapter(adapter);
}
});
return null;
}
@Override
protected void onPostExecute(String result) {
// dismiss the dialog after getting all products
// pDialog.dismiss();
runOnUiThread(new Runnable() {
public void run() {
if (rssItem != null) {
}
}
});
}
これは私の AsyncTask クラスです。