Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

104
Vistas
Consigue contactos en Android sin duplicados

Tengo el siguiente código para recuperar una lista de contactos con Nombre + Número de teléfono:

 @SuppressLint("Range") fun getNamePhoneDetails(): ArrayList<List<String>>? { val names = ArrayList<List<String>>() val cr = contentResolver val cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null) if (cur!!.count > 0) { while (cur.moveToNext()) { val id = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NAME_RAW_CONTACT_ID)) val name = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)) val number = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)) names.add(listOf(id, name, number)) } } return names }

La salida es correcta una vez que ningún contacto tiene dos números de teléfono. Sin embargo, una vez que cualquier contacto tiene dos números de teléfono, obtengo el contacto dos veces. Tiene la misma identificación y nombre, pero un número de teléfono diferente. ¿Cómo puedo hacer que la lista devuelta no tenga un contacto dos veces sino todos los números de teléfono dentro de una lista?

Algo como

[1, Name Name, [phonenumber1, phonenumber2]],[2, Name Name, [phonenumber1]]

Entonces podría iterar a través de la lista de números de teléfono y tener todos los números como cadenas válidas.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Debería más bien crear un Objeto POJO y que asignarle los datos y devolver una lista de ese Objeto POJO y luego puede hacer uso de una extensión distinta en la lista para obtener un resultado filtrado de la forma que desee. Así es como puedes lograr lo que quieres:

Crear un objeto POJO:

 data class Contact( val id : String , val name : String, val number : String)

Y luego, al recuperar los datos, puede hacer lo siguiente:

 @SuppressLint("Range") fun getNamePhoneDetails(): MutableList<Contact>? { val names = MutableList<Contact>() val cr = contentResolver val cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null) if (cur!!.count > 0) { while (cur.moveToNext()) { val id = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NAME_RAW_CONTACT_ID)) val name = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)) val number = cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)) names.add(Contact(id , name , number)) } } return names }

Y luego, mientras recupera los datos, solo necesita filtrar la lista de la siguiente manera:

 val list = getNamePhoneDetails() list.distinctBy { it.number }.forEach { println(it) }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda