2011年8月8日月曜日

ContentProvider/ContentResolverについて

Androidをプログラミングしていて、わかりづらい、ContentProvider/ContentResolverですが、
SQLのDBを扱っているとイメージすると、なんとなく理解できるのではないかと。
それも、「ContentResolverを使っているアプリの側」が、SQL DBを扱っているイメージです。

イメージ的にはこんな感じ。


  1. ContentResolverをアプリで取得し、Queryを発行します。引数は、SQLを書いていると思えばいい、というかそのまま。
  2. 結果が、Cursor型で帰ってきます。このCursor、一瞬JavaのArrayみたいにも見えますが、SQLの結果が帰ってきています。moveToNext()で、1のQuery(検索)に該当したRowが、順に走査できます。moveToNext()でとれたRowには、それぞれID列の値が入っています。
  3. 今度は、DBの値を変更する場合。DBのRowは、それぞれURIでアクセスできるので、変更したいIDが含まれるRowのURIと、変更したいIDとその値を、ContentValueに詰めて、insert()/update()します。



ざっと書くと、こんな感じです。サンプルコードは、本やネットに落ちていますので、ここには載せてません。

アドレス帳や、端末の写真を他のアプリから利用できるよう、ContentProvider/Resolverが使われています。
初めて聞いたとき、なんとなく、データを扱いやすい高級な仕組みのように感じてしまうのですが(少なくとも私は)、実際は普通のDBをアクセスと同じような仕組みです。ちょっとメソッドでラッパーしているような。
そういった意味では、「データを扱いやすい」とも言えますけど、、、

0 件のコメント:

コメントを投稿