新卒社員がAndroidでアドレス帳を作ってみた

By haruka
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

Javaの知識も完璧ではないひよっこ社員がAndroidで簡単なアドレス帳を作成しました。
こんな感じです。
名前や番号を入力して・・・。

AddressbookAdd

アプリを起動したときにはアドレスがリストで表示されるようにします。

AddressbookList

このアドレス帳はandroid1.5のときに作成したのですが、2.0になって再度確認してみたところ変更になっている箇所かありました。
1.6のときにすでに変更されていた可能性もありますが、1.5からの変更箇所を展開します。

①コンテントプロバイダー

公式サイトのコンテントプロバイダーのドキュメントに掲載されたままで、
2.0で非推奨となったインターフェースがあります。(11/08現在)

ドキュメントのソースの例

ドキュメントの説明
The constants for the names of the columns are defined in various interfaces — _ID and _COUNT in BaseColumns,
NAME in PeopleColumns, and NUMBER in PhoneColumns.
The Contacts.People class implements each of these interfaces,
which is why the code example above could refer to them using just the class name.

しかし、現在PeopleColumnsとPhoneColumnsは非推奨となっています。
この2つのインターフェースに該当すると考えられる新しいインターフェースは
android.provider.ContactsContract.ContactsColumns
android.provider.ContactsContract.PhoneLookupColumnsです。
ただし私が見た限り後者に関しては完全に一致しているのですが、
前者に関しては不明点もまだあります。

また以前の利用していたPeopleColumnsとPhoneColumnsの修飾子はpublicだったのですが
新しく提供されているインターフェースはprotectedとなっています。
そのため、私は以前作成したコンテントプロバイダ用の定数クラスのなかで

このように書いていたのですが、書くことができなくなりました。
上記のインターフェースをimplementsしているクラスPhoneLookupがあるのですが、
こちらには修飾子finalがついているので継承できません。
ドキュメントに
The content:// style URI for this table. Append the phone number you want to lookup to this URI and query it to perform a lookup. For example: Uri lookupUri = Uri.withAppendedPath(PhoneLookup.CONTENT_URI, phoneNumber);
とあるので、引数 phoneNumberに値をいれてその条件にあうURIを生成するという使い方のみのようです。
なので、カラムにはインターフェースを利用するのではなく

と定数で書いていきます。
BaseColumnsについては2.0でも使用できます。

②SQLiteOpenHelperを継承したDatabaseHelperのコンストラクタの引数

これは1.6の時にはすでに変更されていたようです。

【1.5のとき】

2番目の引数にはDBの名前、4番目にはDBのバージョンをそれぞれ指定していました。

【現在】

1.5のときもスーパークラスのコンストラクタを呼び出していて、
その引数は今のものと同じなのでこちらは大きな変更点ではないですね。

以前のversionで作ったアプリ等があれば、2.0でどこが変わったのかを確かめるといいかもしれないですね。

関連する投稿