getContentResolver()を使用する。
android.database.Cursor c = getContentResolver().query( Data.CONTENT_URI, new String[]{...}, //取得するColumnを指定。 nullだと全Column ".....", //where句に該当、条件を指定しない場合はnull new String[]{...}, //プレースホルダに設定する値。上記where句の?に順にセットされる "....." //ORDER BY句。nullだと順序を指定しない。 );
getContentResolverメソッドはandroid.content.ContextWrapperクラスに定義されていて、 android.app.ActivityはContextWrapperを継承している。
取得例 [http://developer.android.com/intl/ja/reference/android/provider/ContactsContract.Data.html]
Cursor c = getContentResolver().query(Data.CONTENT_URI, new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL}, Data.CONTACT_ID + "=?" + " AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'", new String[] {String.valueOf(contactId)}, null);
アプリケーションでContactへの参照を保持する場合は、android.provider.ContactsConstract.Contacts.LOOKUP_KEYを使用する。
//String lookupKey <- 保持しているLOOKUP_KEY //lookupKeyからURIを組み上げる android.net.Uri lookupUri = Uri.withAppendedPath(Contents.CONTENT_LOOKUP_URI, lookupKey); //URIからContactを取得 android.database.Cursor c = getContentResolver().query( lookupUri, new String[]{ Contacts.DISPLAY_NAME }, .... ); try{ c.moveToFirst(); String displayName = c.getString(0); }finally{ c.close(); }
パフォーマンスに配慮するなら、LOOKUP_KEYのほかにCONTACT_IDを保持し、 android.provider.ContactsConstract.Contacts.getLookupUri()を使用して URIを取得する。
getLookupUri()では、最初に CONTACT_IDを使用してContactを探し、ヒットしなければLOOKUP_KEYを使用する。
Uri lookupUri = getLookupUri(contactId, lookupKey);
Contactの集約により、CONTACT_IDは変化する可能性があるため、データの参照には常にURIを使用する必要がある。
0 件のコメント:
コメントを投稿