資料作らなきゃ

なので ContentProvider 関連についてちょっと纏めを。

サンプル

NotepadTutorial なソレについて DatabaseHelper を使う形から ContentProvider のサブクラスを作成して、そのメソド経由で CRUD な操作を、という形で修正してみました。
そもそもの作りとして、NotesDBAdapter という DB との i/f なクラスで DatabaseHelper を使っていたのですが、それが ContentProvider の操作を呼び出してるんだけどその中で DatabaseHelper 使って更新、という wrapper が一枚増えたような形になってます。

微妙にムダに見えますが

interface 作って factory method 作ったら model な実装が SQLite だったり GAE だったり、という形で色々なバリエーションが試せるはず。

ContentProvider のサブクラス

以下な実装が必要

  • SQLiteOpenHelper のサブクラスな内部クラスを定義
    • 作成および再作成 (バージョンアップ時) 向けのメソドを定義しておく
  • コンストラクタで UriMatcher な属性の仕込みを行なう
    • この属性を使って操作がどのテーブルに対してとか複数行か単一行かという切り分けをする
  • onCreate メソドで SQLiteDatabase なオブジェクトを生成

あとは

  • insert
  • delete
  • update
  • query
  • getType

というメソドを実装すれば良い。あと使う側で Manifest への記述を忘れない事。

しかし

SQLiteDatabase で SQL を書いてそれを実行なナニが抽象化されててそれで十分とするのではなくて、さらに content:// という URI でテーブルを抽象化して、許可があれば他のアプリからもそのデータへのアクセスを、という所まで考えちゃう所は凄いな。
ってか、全然纏まらん。えーと、こうする事で何がシアワセなのか、について検討した方が良いのか。基本的にはサンプルについてコード読んで云々な方向で (何