連絡先を表示名で検索しようとしています。目標は、この連絡先を開き、それにもっと多くのデータ(特に電話番号)を追加することですが、更新したい連絡先を見つけようとも苦労しています。Android - ディスプレイ名で連絡先を検索
これは私が使用しているコードです:
public static String findContact(Context context) {
ContentResolver contentResolver = context.getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
}
私は「ジョン・ジョンソン」と呼ばれる接点を持っていますが、この方法では、常に「が見つかりません」を返します。私はまた、1つの名前だけで連絡先を検索しようとしたので、違いはありません。
uri、selection、selectionの引数が間違っていると思われます。特定の表示名の連絡先をオンラインで検索することができず、表示名が特殊な情報であるようですが、例えば電話番号とは異なる。
どのように私はジョンジョンソンを見つけるために達成することができます任意のアイデア?
UPDATE:私は、表示名で連絡先を検索する方法を見つけた:
ContentResolver contentResolver = context.getContentResolver();
Uri uri = Data.CONTENT_URI;
String[] projection = new String[] { PhoneLookup._ID };
String selection = StructuredName.DISPLAY_NAME + " = ?";
String[] selectionArguments = { "John Johnson" };
Cursor cursor = contentResolver.query(uri, projection, selection, selectionArguments, null);
if (cursor != null) {
while (cursor.moveToNext()) {
return cursor.getString(0);
}
}
return "John Johnson not found";
このコード表示名「のジョン・ジョンソン」との最初の接触の接触IDを返します。私の元のコードでは、間違ったURIと誤った選択がクエリにあった。
おかげで、それがヌルの突起を持って助けにはなりませんでした。同じコードが電話番号を検索しているときに機能するので、別の列で一致するものを検索していても、PhoneLookup._IDを投影として持つことは可能です。 私が正しく理解していれば、あなたが探しているものではなく、どのデータをクエリから取り戻したいのかということです。したがって、投影をnullに設定した場合、クエリから取得した連絡先からすべてのデータを取得するよう求めるだけです。 –