Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

103
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda