1つの外側の結合クエリですべての連絡先とその詳細(郵便アドレスなど)を取得します
-
27-10-2019 - |
質問
特定の連絡先の連絡先データを取得する方法を知っています。ただし、すべての連絡先とその詳細の一部を1回のクエリで取得する方法は見つかりません。次のコードはすべての連絡先を取得します 持っている 郵便住所:
Uri uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
String[] projection = new String[] {
StructuredPostal._ID,
StructuredPostal.LOOKUP_KEY,
StructuredPostal.DISPLAY_NAME,
StructuredPostal.STREET,
StructuredPostal.CITY
};
String sortOrder = StructuredPostal.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor c = getContentResolver().query(uri, projection, null, null, sortOrder);
しかし、私に必要なのはです 全て 連絡先、郵便住所があるかどうかにかかわらず。これは、contatsContract APIを使用して実行可能ですか、それともカスタム外部結合クエリを作成する必要がありますか?どのようにヒントはありますか?
解決
Android 2.0のすべての連絡先情報は、単一のデータベーステーブルに保存されます。したがって、必要なすべての情報を1つのクエリで取得できます。
Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
null, null, null, sortOrder);
データを繰り返してチェックします Data.MIMETYPE
桁。たとえば、この列にある場合 StructuredPostal.CONTENT_ITEM_TYPE
価値、それからあなたは得ることができます StructuredPostal
この列のフィールド。
他のヒント
連絡先IDがあり、郵便アドレスを取得する場合は、これを使用してください。
Uri postal_uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
Cursor postal_cursor = getContentResolver().query(postal_uri,null, ContactsContract.Data.CONTACT_ID + "="+contactId.toString(), null,null);
while(postal_cursor.moveToNext())
{
String Strt = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.STREET));
String Cty = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.CITY));
String cntry = postal_cursor.getString(postal_cursor.getColumnIndex(StructuredPostal.COUNTRY));
}
postal_cursor.close();
所属していません StackOverflow