开发使用CouchBase作为其数据存储区的Android应用程序。与Couch的所有交互都是通过HTTP进行的,因此无法在UI线程上完成。这通常是我们可以非常合理地解决的问题,但是我遇到了这个问题时遇到了困难和困难的地方:
我正在尝试开发一个封装/可重用的CouchListAdapter
。概念是,从页面中的Couch获取数据然后缓存它。说页面大小为20
,因此在初始化时,首先获取20
,然后在询问21
时,请获取21
- 40
。
由于线程上禁止网络,我的CouchViewLoader
有方法JSONObject getItemAt(int i)
和int getCount()
,当被问及它没有的数据时,必须启动异步线程到获取数据,然后发出由封闭活动处理的广播,然后重新绑定/通知数据已更改。
我几乎让它工作但我现在陷入困境:
java.lang.IllegalStateException
:适配器的内容已更改,但ListView
未收到通知。确保不从后台线程修改适配器的内容,而只是从UI线程修改。
如何协调在UI线程上无法访问Couch以及是否只需要从UI线程更新我的适配器?
当然其他人已经解决了这个问题?
(请记住,这一切都是围绕着这样的想法设计的,即给定视图可能会返回比我们可以放入内存或显示在屏幕上更多的结果。)
答案 0 :(得分:0)
答案 1 :(得分:0)
您可能需要考虑将content provider与loaders一起使用。基本上,您需要的所有信息都位于这些链接上。
一般观点:
CursorAdapter
,CursorTreeAdapter
...)进行更新。你的工作是:
关于内容提供商,虽然他们说如果您不打算与其他应用程序共享数据,则不需要开发自己的提供程序。 - 但他们强烈建议使用加载程序(他们使用support library支持较旧的API),根据我的经验,内容提供商将节省您的时间。我会说:只需与内容提供商联系: - )