开发一个使用 CouchBase 作为其数据存储的 Android 应用程序。与 Couch 的所有交互都是通过 HTTP 进行的,因此无法在 UI 线程上完成。这通常是我们可以相当合理地解决的问题,但我遇到了这个问题:
我正在尝试开发一个封装/可重复使用的CouchListAdapter
. 这个概念是,从页面中的 Couch 获取数据,然后缓存它。说页面大小是20
,所以在初始化时,首先获取20
,然后如果要求21
,去获取21
- 40
。
由于线程上网络的禁止,my CouchViewLoader
which has methods JSONObject getItemAt(int i)
and int getCount()
,当被要求提供它没有的数据时,必须启动一个异步线程来获取数据,然后发送一个由封闭活动处理的广播,然后重新绑定/通知数据已更改。
我几乎让它工作了,但现在被困在我得到的地方:
java.lang.IllegalStateException
:适配器的内容发生了变化,但ListView
没有收到通知。确保适配器的内容不是从后台线程修改的,而只是从 UI 线程修改的。
如何调和无法在 UI 线程上点击 Couch 和只需要从 UI 线程更新我的适配器?
其他人肯定已经解决了这个问题吗?
(请记住,这一切都是围绕给定视图返回的结果可能比我们在内存中或在屏幕上显示的更多的想法设计的。)