これが重複した質問である可能性がある場合は申し訳ありません。私は夜を過ごしてこれに頭を悩ませましたが、これにも光を当てる可能性のある他の投稿が見つからないようです。より多くの目が何かを見つけるかもしれません。
ContactsContract.Dataの API ドキュメントから、特定のフィールドを指定すると、ライブラリがマジックを実行し、バックグラウンドで暗黙的な結合を実行するという印象を受けました。
私にはうまくいかないようです。
import android.provider.ContactsContract.CommonDataKinds.Phone;
private Cursor getContacts()
{
// Run query
Uri uri = Phone.CONTENT_URI;
String[] projection = new String[] {
Phone.DISPLAY_NAME,
Phone.NUMBER,
Phone.CONTENT_ITEM_TYPE,
Phone.HAS_PHONE_NUMBER,
Phone.IN_VISIBLE_GROUP
};
String selection = Phone.HAS_PHONE_NUMBER + " = '1' AND " + Phone.IN_VISIBLE_GROUP + " = '1'";
String[] selectionArgs = null;
String sortOrder = Phone.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
return getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
}
これが実行されると、次のように終了します。
java.lang.IllegalArgumentException: Invalid column vnd.android.cursor.item/phone_v2
ContactsContract.CommonDataKinds.Phoneのドキュメントから、次のことが明確に述べられています。
You can use all columns defined for ContactsContract.Data as well as the following aliases.
私は何が欠けていますか?