2015-09-21 3 views
0

У меня есть список, поддерживаемый адаптером курсора. Однако, когда я иду, чтобы внести изменения в базе данных на фоне синхронизации, то приложение падает с следующим:Android: сбой в ListView CursorAdapter при изменении базы данных?

java.lang.IllegalStateException: couldn't move cursor to position 0 
     at android.support.v4.widget.CursorAdapter.getView(CursorAdapter.java:248) 
     at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:232) 
     at android.widget.AbsListView.obtainView(AbsListView.java:2842) 
     at android.widget.ListView.makeAndAddView(ListView.java:1884) 
     at android.widget.ListView.fillSpecific(ListView.java:1364) 
     at android.widget.ListView.layoutChildren(ListView.java:1671) 
     at android.widget.AbsListView.onLayout(AbsListView.java:2632) 

Кроме того, данные я добавляю очищает базу данных и не вставляет никаких данных вообще. Я смущен, поскольку я думал, что курсор асинхронен с базой данных.

Аварийная ситуация возникает между окончанием синхронизации и при отправке широковещательной передачи уведомляет о завершении синхронизации. Приемник широковещательной передачи даже не получает широковещательную передачу.

Мой вопрос: как я могу многопоточно это? То есть, как я могу очистить и изменить базу данных, а затем обновить курсор после активности после завершения синхронизации?

+0

использовать notifydatasetchanged() метод после изменения данных вместо этого вручную – dileep

+0

Я не совсем уверен, что вы подразумеваете под «Я, хотя курсор был асинхронным к базе данных», если вы хотите обновить таблицу в одном потоке, пока продолжая отображать список, всегда безопаснее использовать ContentProviders и Loaders. – e4c5

ответ

0

Я решил это, удалив getLoaderManager(). InitLoader(), потому что это автоматически управляло моим курсором.