Sto cercando di ottenere il numero di telefono del contatto dopo aver recuperato il numero ID dall'attività incorporata. Tuttavia, ogni volta che interrogo il database utilizzando il cursore nel mio codice qui sotto, ottengo zero righe restituite anche se c'è un numero di cellulare per il contatto che ho selezionato.Recupera numero telefonico contatto dall'URI in Android
Qualcuno può indicarmi una direzione migliore o mostrare un esempio di come ottenere il numero di telefono del contatto dopo aver ottenuto il suo ID utente?
Il mio codice:
private Runnable getSMSRunnable() {
return new Runnable() {
public void run() {
Intent i = new Intent(Intent.ACTION_PICK,
ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
startActivityForResult(i, CONTACTS_REQUEST_CODE);
}
};
}
restituisce l'output Log
content://com.android.contacts/data/6802
da cui passare l'ID (6802) in un metodo che è stato progettato per restituire il numero di telefono dal ID con la tipo di data (in questo caso ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
public static String getContactPhoneNumberByPhoneType(Context context, long contactId, int type) {
String phoneNumber = null;
String[] whereArgs = new String[] { String.valueOf(contactId), String.valueOf(type) };
Log.d(TAG, String.valueOf(contactId));
Cursor cursor = context.getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? and "
+ ContactsContract.CommonDataKinds.Phone.TYPE + " = ?", whereArgs, null);
int phoneNumberIndex = cursor
.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER);
Log.d(TAG, String.valueOf(cursor.getCount()));
if (cursor != null) {
Log.v(TAG, "Cursor Not null");
try {
if (cursor.moveToNext()) {
Log.v(TAG, "Moved to first");
Log.v(TAG, "Cursor Moved to first and checking");
phoneNumber = cursor.getString(phoneNumberIndex);
}
} finally {
Log.v(TAG, "In finally");
cursor.close();
}
}
Log.v(TAG, "Returning phone number");
return phoneNumber;
}
che restituisce null per un numero di telefono - il che significa che non riesce a trovare la riga a cui sto tentando di accedere - il che significa che c'è qualcosa di sbagliato nella mia query - tuttavia se controllo un contatto che ha un numero di telefono cellulare - come potrei ottenere una query a 0 righe?
Qualsiasi aiuto sarebbe molto apprezzato. Grazie mille!
Funziona anche se la tua spiegazione non è chiara. Perché telefono.CONTACT_ID (contact_id) non corrisponde a CONTACTS._ID (_id) – redochka
Forse è più semplice se lo spiego in questo modo: '_ID' è per il database,' CONTACT_ID' è per un ID di contatto quando non stai interrogando quella tabella specifica . questo aiuta? – hwrdprkns
Bottom line: Phones._ID == Contacts._ID – redochka