String[] PROJECTION = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
};
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
String SELECTION = "LOWER(" + ContactsContract.Contacts.DISPLAY_NAME + ")"
+ " LIKE '" + constraint + "%' " + "and " +
ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
Cursor cur = managedQuery(ContactsContract.Contacts.CONTENT_URI,
PROJECTION, SELECTION, null, sortOrder);
は、しかし、私は最初と最後の名前の連絡先の両方を取得できるようにしたいが別に、これを取得しようとしてStructuredNameを使用しようとしましたが、動作させることができません。
誰でも正しい方向に、FirstNameとLastに名前を分割するためにStructuredNameを正しく使用する方法を教えてもらえますか?
UPDATE:私は次のことを試みたhovanessyanのアドバイスに従い
次のように
String[] PROJECTION = new String[] {
ContactsContract.Data._ID,
ContactsContract.Data.DISPLAY_NAME,
ContactsContract.Data.HAS_PHONE_NUMBER,
};
String SELECTION = ContactsContract.CommonDataKinds.StructuredName.IN_VISIBLE_GROUP + " = '1'";
String sortOrder = ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, PROJECTION, SELECTION, null, sortOrder);
int indexGivenName = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME);
int indexFamilyName = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME);
int indexDisplayName = cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
while (cursor.moveToNext()) {
String given = cursor.getString(indexGivenName);
String family = cursor.getString(indexFamilyName);
String display = cursor.getString(indexDisplayName);
Log.e("XXX", "Name: | " + given + " | " + family + " | " + display);
}
しかしPROJECTIONを使用するとクラッシュが発生します。
12-08 16:52:01.575: E/AndroidRuntime(7912): Caused by: java.lang.IllegalArgumentException: Invalid column has_phone_number
私はPROJECTIONを削除した場合すべての結果が表示されますが、多くはNULLを含んでいます。例えば
:
12-08 16:56:14.055: E/XXX(8155): Name: | null | null | null
12-08 16:56:14.055: E/XXX(8155): Name: | null | null | null
12-08 16:56:14.055: E/XXX(8155): Name: | null | null | null
12-08 16:56:14.055: E/XXX(8155): Name: | null | null | null
だから、誰もが、私は私のPROJECTIONが動作しないということで間違ってやっているかを見ることができますか?
FURTHER UPDATE:
私は私のPROJECTIONと課題を整理しているが、今、私は、データコンテンツプロバイダは、すべてのヌルのデータを私に戻って供給し、私のコードでNULLポインタ例外を引き起こしている問題を持っています。
ContactsContract.Contactsからのカーソルカウントは私に戻って115を返しますが、DATAテーブルを使用すると同じパラメータを使用して464が返され、これがアプリで大きな問題を引き起こしています。
誰もがそれが何であるか考えていますか?
それは行う必要がありますFilterQuery内で問題を引き起こしているようだが、私はString、DisplayString、HasPhoneNumberのカラムを取得できる必要があります。ここでは、String制約はGivenまたはFamilyのいずれかの名前になります。ですから、私はmanagedQueryが必要です。これはいくつかの問題を提示しているようです。 –
これを実現するには、汎用テーブルDataを使用する必要があります。http://developer.android.com/reference/android/provider/ContactsContract.Data.html – hovanessyan
一般的なDATAテーブルを使用して情報を取得しようとしました。いくつかの問題に出くわしました、私はあなたのおかげでさらに助けることができる場合のために私の質問を編集しました。 –