RAW_CONTACT_ID & SOURCE_ID가 유용 할 수 있습니다. 하지만 프로그래밍 방식으로 찾을 수는 없습니다. 아래 코드는 제가 시도하는 코드입니다.연락처가 생성 된 소스 ID를 알고 싶다면 Google에서 만든 연락처가 있다면 고유 한 연락처 ID를 알고 싶습니다.
CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 2 rows, 38 columns.
를 System.err : java.lang.IllegalStateException :
Cursor c = getContentResolver().query(ContactsContract.RawContacts.CONTENT_URI, new String[]
{ContactsContract.RawContacts._ID}, ContactsContract.RawContacts.CONTACT_ID + "=?",
new String[]{String.valueOf(cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)))}, null);
try {
if (c.moveToFirst()) {
long rawContactId = c.getLong(0);
LogShowHide.LogShowHideMethod("== rawContactId ===", "" + rawContactId);
}
} finally {
c.close();
}
Log.e(TAG, "cur.getString(cur.getColumnIndex(ContactsContract.RawContacts.SOURCE_ID)): " + cur.getString(cur.getColumnIndex(ContactsContract.RawContacts.SOURCE_ID)));
Log.e(TAG, "cur.getString(cur.getColumnIndex(ContactsContract.Contacts.Data.RAW_CONTACT_ID): " + cur.getString(cur.getColumnIndex(ContactsContract.Contacts.Data.RAW_CONTACT_ID)));
Log.e(TAG, "cur.getString(cur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)): " + cur.getString(cur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID)));
나는 오류를 얻고 행 0을 읽을 수 없습니다, COL -1 CursorWindow에서. 커서가 데이터에 액세스하기 전에 커서가 올바르게 초기화되었는지 확인하십시오.
제 코드에 오류가 있음을 알려주세요.
업데이트 코드 : 당신이 그것을에 Cursor.close()
라고 한 후에는 커서 읽기 위해 노력하고 Cursor cur = getContentResolver().query( ContactsContract.RawContacts.CONTENT_URI, new String[]{ContactsContract.RawContacts._ID, ContactsContract.RawContacts.SOURCE_ID}, ContactsContract.RawContacts.CONTACT_ID + "=?", null, null); try { if (cur.moveToFirst()) { long rawContactId = cur.getLong(0); LogShowHide.LogShowHideMethod("== rawContactId ===", "" + rawContactId); LogShowHide.LogShowHideMethod(TAG, "ContactsContract.RawContacts.SOURCE_ID: " + cur.getString(cur.getColumnIndex(ContactsContract.RawContacts.SOURCE_ID))); LogShowHide.LogShowHideMethod(TAG, "ContactsContract.Contacts.Data.RAW_CONTACT_ID: " + cur.getString(cur.getColumnIndex(ContactsContract.Contacts.Data.RAW_CONTACT_ID))); LogShowHide.LogShowHideMethod(TAG, "ContactsContract.Data.RAW_CONTACT_ID: " + cur.getString(cur.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID))); } } catch (Exception e) { e.printStackTrace(); } finally { cur.close(); }
감사합니다. 내 쿼리가 작동하지 않는 것을 확인하십시오. 커서를 수정하십시오. Cursor cur = getContentResolver(). ( ContactsContract.RawContacts.CONTENT_URI, new String [] {ContactsContract.RawContacts._ID, ContactsContract.RawContacts.SOURCE_ID}, ContactsContract. RawContacts.CONTACT_ID + "=?", null, null); –
코멘트에 코드를 넣는 대신 질문을 업데이트해야합니다. 어쨌든, 선택 필드에서'?'를 사용한다면, 쿼리의 네번째 필드에 값을 입력해야합니다.'selectionArgs' – marmor