Vielen Dank für Ihre Hilfe. Wie kann ich den gesamten Namen in einer ListView anzeigen? (Damit ich den Namen aller Kontakte in meinem Telefon in einem anderen Fenster sehen kann.) danke
fsdf fsd
4
Aus irgendeinem Grund erhält dieser Code jeden Kontakt zweimal. Weißt du zufällig warum?
Andrew Nr.
1
@Aerrow einige Male einige Kontakte zweimal bekommen. Lösen Sie dieses Problem?
Suman
3
Vergessen Sie nicht, den Cursor zu schließen!
MikeL
13
Verwenden Sie diesen Code NICHT. Es fragt nach allen Kontakten und führt dann eine zusätzliche Abfrage für jeden einzelnen Kontakt aus. Schreckliche Leistung - Die Ausführung auf einem realen Gerät kann länger als 10 Sekunden dauern.
Vasiliy
15
publicclassMyActivityextendsActivityimplementsLoaderManager.LoaderCallbacks<Cursor>{privatestaticfinalint CONTACTS_LOADER_ID =1;@Overridepublicvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.main);// Prepare the loader. Either re-connect with an existing one,// or start a new one.
getLoaderManager().initLoader(CONTACTS_LOADER_ID,null,this);}@OverridepublicLoader<Cursor> onCreateLoader(int id,Bundle args){// This is called when a new Loader needs to be created.if(id == CONTACTS_LOADER_ID){return contactsLoader();}returnnull;}@Overridepublicvoid onLoadFinished(Loader<Cursor> loader,Cursor cursor){//The framework will take care of closing the// old cursor once we return.List<String> contacts = contactsFromCursor(cursor);}@Overridepublicvoid onLoaderReset(Loader<Cursor> loader){// This is called when the last Cursor provided to onLoadFinished()// above is about to be closed. We need to make sure we are no// longer using it.}privateLoader<Cursor> contactsLoader(){Uri contactsUri =ContactsContract.Contacts.CONTENT_URI;// The content URI of the phone contactsString[] projection ={// The columns to return for each rowContactsContract.Contacts.DISPLAY_NAME};String selection =null;//Selection criteriaString[] selectionArgs ={};//Selection criteriaString sortOrder =null;//The sort order for the returned rowsreturnnewCursorLoader(
getApplicationContext(),
contactsUri,
projection,
selection,
selectionArgs,
sortOrder);}privateList<String> contactsFromCursor(Cursor cursor){List<String> contacts =newArrayList<String>();if(cursor.getCount()>0){
cursor.moveToFirst();do{String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contacts.add(name);}while(cursor.moveToNext());}return contacts;}}
Gute Verwendung von CursorLoader. Wissen Sie, wie Sie Telefonnummern von jedem dieser Kontakte in einem CursorLoader abrufen können?
Felker
1
Sie können LoaderManager.LoaderCallbacks <Kontakt> anstelle von LoaderManager.LoaderCallbacks <Cursor> implementieren. Wobei 'Kontakt' Ihre benutzerdefinierte Entität ist.
Artyom
1
@Artyom Kannst du bitte erklären, wie man den Telefonnummern-Teil ein bisschen bekommt?
hushed_voice
15
Holen Sie sich Kontaktinformationen, Fotokontakte, Foto-Uri und konvertieren Sie zum Klassenmodell
privatevoid getPhoneNumbers(){Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);// Loop Through All The Numberswhile(phones.moveToNext()){String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));// Cleanup the phone number
phoneNumber = phoneNumber.replaceAll("[()\\s-]+","");// Enter Into Hash Map
namePhoneMap.put(phoneNumber, name);}// Get The Contents of Hash Map in Logfor(Map.Entry<String,String> entry : namePhoneMap.entrySet()){String key = entry.getKey();Log.d(TAG,"Phone :"+ key);Stringvalue= entry.getValue();Log.d(TAG,"Name :"+value);}
phones.close();}
Denken Sie daran, dass im obigen Beispiel der Schlüssel die Telefonnummer und der Wert ein Name ist. Lesen Sie daher Ihre Inhalte wie 998xxxxx282-> Mahatma Gandhi anstelle von Mahatma Gandhi-> 998xxxxx282
Vielen Dank, ich werde es versuchen, wenn ich weitere Fragen habe, werde ich Sie stellen
fsdf fsd
Vielen Dank für Ihre Hilfe. Wie kann ich den gesamten Namen in einer ListView anzeigen? (Damit ich den Namen aller Kontakte in meinem Telefon in einem anderen Fenster sehen kann.) danke
fsdf fsd
6
Diese Antwort ist falsch. PhoneLookup.NUMBERist keine Spalte in ContactsContract.Contacts.CONTENT_URIund numberFieldColumnIndexkehrt immer zurück -1.
Cprcrack
2
Es sollte so sein: Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); while (phones.moveToNext()) { String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phones.close();
user1510006
1
@gunner_dev Bitte schreiben Sie eine neue Antwort, wenn Sie sicher sind, dass diese Antwort einschließlich Ihrer Bearbeitung funktioniert.
Bö macht Blau
2
Dies ist die Methode, um den Namen und die Nummer der Kontaktliste abzurufen
privatevoid getAllContacts(){ContentResolver contentResolver = getContentResolver();Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI,null,null,null,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME +" ASC");if(cursor.getCount()>0){while(cursor.moveToNext()){int hasPhoneNumber =Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));if(hasPhoneNumber >0){String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",newString[]{id},null);if(phoneCursor !=null){if(phoneCursor.moveToNext()){String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));//At here You can add phoneNUmber and Name to you listView ,ModelClass,Recyclerview
phoneCursor.close();}}}}}}
Erhalten Sie alle Kontakte in weniger als einer Sekunde und ohne Belastung für Ihre Aktivität - folgen Sie meinen Schritten funktioniert wie ein Zauber.
ArrayList<Contact> contactList =newArrayList<>();privatestaticfinalString[] PROJECTION =newString[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID,ContactsContract.Contacts.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER
};privatevoid getContactList(){ContentResolver cr = getContentResolver();Cursor cursor = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PROJECTION,null,null,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME +" ASC");if(cursor !=null){HashSet<String> mobileNoSet =newHashSet<String>();try{finalint nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);finalint numberIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);String name, number;while(cursor.moveToNext()){
name = cursor.getString(nameIndex);
number = cursor.getString(numberIndex);
number = number.replace(" ","");if(!mobileNoSet.contains(number)){
contactList.add(newContact(name, number));
mobileNoSet.add(number);Log.d("hvy","onCreaterrView Phone Number: name = "+ name
+" No = "+ number);}}}finally{
cursor.close();}}}
Antworten:
Versuchen Sie das auch,
Wenn Sie weitere Referenzmittel benötigen, lesen Sie diesen Link. Lesen Sie die Kontaktliste
quelle
und vergiss nicht
quelle
Holen Sie sich Kontaktinformationen, Fotokontakte, Foto-Uri und konvertieren Sie zum Klassenmodell
1). Beispiel für ein Klassenmodell:
2). Kontakte abrufen und in Modell konvertieren
quelle
Verbesserung der Antwort von @Adiii - Bereinigt die Telefonnummer und entfernt alle Duplikate
Deklarieren Sie eine globale Variable
Verwenden Sie dann die folgende Funktion
Denken Sie daran, dass im obigen Beispiel der Schlüssel die Telefonnummer und der Wert ein Name ist. Lesen Sie daher Ihre Inhalte wie 998xxxxx282-> Mahatma Gandhi anstelle von Mahatma Gandhi-> 998xxxxx282
quelle
Das Ergebnis ist ein Array von NameFromContacts voller Kontakte. Stellen Sie außerdem sicher, dass Sie hinzugefügt haben
in main.xml
quelle
PhoneLookup.NUMBER
ist keine Spalte inContactsContract.Contacts.CONTENT_URI
undnumberFieldColumnIndex
kehrt immer zurück-1
.Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); while (phones.moveToNext()) { String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phones.close();
Dies ist die Methode, um den Namen und die Nummer der Kontaktliste abzurufen
quelle
quelle
Erhalten Sie alle Kontakte in weniger als einer Sekunde und ohne Belastung für Ihre Aktivität - folgen Sie meinen Schritten funktioniert wie ein Zauber.
Kontakte
Leistungen
quelle