ContentProviderを自動で実装する

AndroidのContentProviderを実装するのって非常に面倒ですよね。
いつも実装するたびに、「何でこんなめんどくさいんだー!」と愚痴りたくなるのですが、これを自動生成する方法があったので書いておこうと覆います。

EclipseのプラグインでMOTODEV Studioというのがあるのですがこれを利用します。
もともとはAndroid開発用のプラグインのようなのですが、この中にSQLite関係のクラスを自動生成してくれる機能があって、それを利用します。
まずは、Eclipse MarketPlaceでMOTODEV Studioで検索してインストールします。(ユーザー登録を求められたと思います)

次に必要なテーブル定義をしたSQLiteのDBファイルをSQLite用のクライアントツールなどで作成します。(僕は、TkSqliteというのを使っています。)

次に、EclipseのパースペクティブをMOTODEV Databaseに切り替えて、MOTODEV DatabaseExplorerビューの中の、「Create Database Management Classes」というアイコンをクリックします。
すると、設定ダイアログが開きますので、DataBase File の箇所に先ほど作成しておいたSQLiteファイルを指定します。
あとは、必要な箇所を入力して「完了」をクリックすれば、先ほどのテーブル定義に対応したSQLiteOpenHelperクラスとContentProviderクラスを一瞬で生成してくれます。
また、先ほど指定したSQLiteファイルはassets配下にコピーされていて、生成されたSQLiteOpenHelperクラスを見ると、コンストラクターの中で上記のSQLiteファイルを適切な位置、(/data/data/packagename/databases/)にコピーする処理が書かれています。
つまり、DBの初期化時にDBファイルごとコピーしてしまうのですね。なので、必要なレコードを最初からインサートしておいておく、といったことも可能です。

という感じに非常にらくちんな機能なのですが、一つだけ残念な点があって、それは、これで生成されるコンテンツプロバイダーは、各テーブルごとに別々のコンテンツプロバイダーとして生成される、っと言うことです。つまり、ひとつのDBで3つのテーブルがある場合コンテンツプロバイダーも3つになってしまいます。
これで何が問題かというと、OpenHelperも個別になってしまうので、場合によっては、Database locked などのExceptionが発生してしまう可能性があるという点です。
これについては、ちょっと長くなってしまうので別の機会に書きたいと思います。

ちなみに、上記の機能以外にも、スニペットというビューがあって、一般的によく使用するようなコードがスニペットになって並んでいます。エディターにドラッグすることでコードを挿入できるので、こちらも使い方によっては重宝するかもしれないです。(自分は使ってないですが)

Leave a Comment

NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

getting health insurance in new york buy clomid online UK major health insurance companies buy levitra uk online what are wells fargo hours buy finasteride affordable health insurance for children accutane no prescription medical center of trinity viagra online uten resept midwestern university wellness center dapoxetine top individual health insurance companies viagra ireland