IllegalStateException: содержимое адаптера изменилось, но ListView не получил уведомления


Интуитивно, я знаю, когда он бросает IllegalStateException. Но в моем случае, я не могу, хотя, вероятно, догадываюсь, где проблема в источнике. Осмелюсь сказать, линии тревоги есть:

private class LoadMoreDataTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... params) {
        if (isCancelled()) {
            return null;
        }
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        OFFSET = OFFSET + COUNT;
        getWallsData();
        return null;
    }
    @Override
    protected void onPostExecute(Void result) { 

        mPostListAdapter.notifyDataSetChanged();                
        wallPostsList.onLoadMoreComplete();
        super.onPostExecute(result);
    }
    @Override
    protected void onCancelled() {
        wallPostsList.onLoadMoreComplete();
    }

Есть сообщение logcat:

java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131099757, class com.costum.android.widget.LoadMoreListView) with Adapter(class android.widget.HeaderViewListAdapter)]
1 2

1 ответ:

Проблема решена: ответ найден там ! что я сделал? Я добавил, switcher, Boolean LOADMORE SWITCHER=false; в качестве глобальной видимости и заменил mPostListAdapter.notifyDataSetChanged (); из doInBackground () в getWallsData ().

private Boolean LOADMORE SWITCHER=false;
....
private class LoadMoreDataTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... params) {
        if (isCancelled()) {
            return null;
        }
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
        }
        OFFSET = OFFSET + COUNT;
        LOADMORE=true;
        getWallsData();
        return null;
    }
    @Override
    protected void onPostExecute(Void result) { 

       // mPostListAdapter.notifyDataSetChanged(); was replaced to getWallsData() body
        wallPostsList.onLoadMoreComplete();
        super.onPostExecute(result);
    }
    @Override
    protected void onCancelled() {
        wallPostsList.onLoadMoreComplete();
    } 
}
.....
getWallsData(){
     ...
     if(LOADMORE){
          mPostListAdapter.notifyDataSetChanged();
          LOADMORE=false;


     }
}

Я очень-очень рад сказать: у меня больше нет этой проблемы:

java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131099757, class com.costum.android.widget.LoadMoreListView) with Adapter(class android.widget.HeaderViewListAdapter)]