我正在尝试运行此代码,但是当我运行此代码时,我收到了IllegalStateException,表示未通知listview的内容,但我在更新数据时收到通知。这是一个自定义列表视图适配器。这是我的代码的相关部分:
class LoadingThread extends Thread {
public void run() {
int itemsOriginallyLoaded = 0;
synchronized( items ) {
itemsOriginallyLoaded = items.size();
}
for( int i = itemsOriginallyLoaded ; i < itemsToLoad ; ++i ) {
Log.d( LOG_TAG, "Loading item #"+i );
//String item = "FAIL";
//try {
String item = "FAIL";
try {
item = stockGrabber.getStockString(dataSource.get(i));
} catch (ApiException e) {
Log.e(LOG_TAG, "Problem making API request", e);
} catch (ParseException e) {
Log.e(LOG_TAG, "Problem parsing API request", e);
}
//} catch (ApiException e) {
// Log.e(TAG, "Problem making API request", e);
//} catch (ParseException e) {
// Log.e(TAG, "Problem parsing API request", e);
//}
synchronized( items ) {
items.add( item );
}
itemsLoaded = i+1;
uiHandler.post( updateTask );
Log.d( LOG_TAG, "Published item #"+i );
}
if( itemsLoaded >= ( dataSource.size() - 1 ) )
allItemsLoaded = true;
synchronized( loading ) {
loading = Boolean.FALSE;
}
}
}
class UIUpdateTask implements Runnable {
public void run() {
Log.d( LOG_TAG, "Publishing progress" );
notifyDataSetChanged();
}
}
答案 0 :(得分:2)
我不知道是什么物品。如果项目是ArrayAdapter
,则无法从后台线程安全地修改ArrayAdapter
的内容(无论是您分叉的线程还是AsyncTask
)。
答案 1 :(得分:0)
在Android应用中使用Thread
并不是一个好主意。尝试使用AsyncTask,它提供了更方便的后台任务使用方法
答案 2 :(得分:0)