CouchBase をデータストアとして使用する Android アプリケーションの開発。Couch とのやり取りはすべて HTTP 経由であるため、UI スレッドでは実行できません。これは通常、かなり合理的に回避できるものですが、私はこの問題で岩と困難な場所にぶつかっています:
カプセル化/再利用可能な を開発しようとしていますCouchListAdapter
。コンセプトは、Couch からページ単位でデータを取得してキャッシュすることです。ページサイズが20
であるとすると、初期化時に最初にフェッチ20
し、次に要求された場合は21
get 21
-に移動します40
。
スレッド上のネットワークが禁止されているため、CouchViewLoader
メソッドJSONObject getItemAt(int i)
とを持っている myint getCount()
は、持っていないデータを要求されたときに、データを取得するために非同期スレッドを開始する必要があります。データが変更されたことを通知します。
私はほとんどそれを機能させましたが、私が得たところで立ち往生しています:
java.lang.IllegalStateException
: アダプターの内容が変更されましたがListView
、通知を受け取りませんでした。アダプターのコンテンツがバックグラウンド スレッドからではなく、UI スレッドからのみ変更されていることを確認してください。
UI スレッドで Couch をヒットできないことと、UI スレッドからのみアダプターを更新する必要があることをどのように調整しますか??
確かに他の人がこの問題を解決しましたか?
(これはすべて、特定のビューがメモリに収まらない、または画面に表示できないほど多くの結果を返す可能性があるという考えに基づいて設計されていることに注意してください。)