Прочитайте контакты и покажите их в программе просмотра в Котлине. - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь прочитать контакты из ContactsContract в Котине.Но это не показывает никакого контакта в обзоре переработчика .Примечательно, что java-версия отлично работает .

Итак, вот мой код Kotlin для чтения контакта:

private var adapter: ContactsAdapter? = null
private var myContacts : MutableList<MyContacts> = ArrayList()

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // code for recyclerview and adapter and checkPermission
    val itemDecoration = DividerItemDecoration(this, DividerItemDecoration.VERTICAL)
    recycler_view.layoutManager = LinearLayoutManager(this)
    recycler_view.addItemDecoration(itemDecoration)
    adapter = ContactsAdapter(myContacts)
    recycler_view.hasFixedSize()
    recycler_view.adapter = ContactsAdapter(myContacts)

    checkPermission()
}

private fun loadContactFromProvider() {
    showProgressBar()
    val contentResolver = contentResolver
    val cursor = contentResolver.query(CONTENT_URI, null, null, null, DISPLAY_NAME)

    if (cursor != null && cursor.count > 0) {
        while (cursor.moveToNext()) {
            val id = cursor.getString(cursor.getColumnIndex(ID))
            val name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME))
            val hasPhoneNumber = cursor.getInt(cursor.getColumnIndex(HAS_PHONE_NUMBER))
            val contacts = MyContacts()

            if (hasPhoneNumber > 0) {
                contacts.contactName = name
                val phoneCursor = contentResolver.query(PHONE_URI, arrayOf(NUMBER), "$PHONE_ID = ?", arrayOf(id), null)
                val phoneNumbers = ArrayList<String>()
                phoneCursor!!.moveToFirst()
                while (!phoneCursor.isAfterLast) {
                    val phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER)).replace(" ", "")
                    phoneNumbers.add(phoneNumber)
                    phoneCursor.moveToNext()
                }
                contacts.contactNumber = phoneNumbers
                phoneCursor.close()
            }
            val inputStream = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, ContentUris.withAppendedId(CONTENT_URI, id.toLong()))
            if (inputStream != null) {
                val bitmap = BitmapFactory.decodeStream(inputStream)
                contacts.contactImage = bitmap?.toString()
            } else {
                contacts.contactImage = vectorDrawableToBitmap(R.drawable.ic_person)?.toString()
            }

            log(contacts.contactName + " " + contacts.contactNumber.toString() + " " + contacts.contactImage.toString())
            myContacts.add(contacts)
        }
        adapter?.notifyDataSetChanged()
        cursor.close()
    }
}

Данные журнала также в порядке, они показывают полный список контактов.Но я не могу видеть это в обзоре переработчика.Постоянное поле, такое как ID, DISPLAY_NAME и т. Д., Уже определено в сопутствующем объекте.

Код Котлина для RecyclerViewAdapter:

class ContactsAdapter(private val contactList: MutableList<MyContacts>): RecyclerView.Adapter<ContactsAdapter.ContactViewHolder>() {

override fun onCreateViewHolder(viewGroup: ViewGroup, position: Int): ContactViewHolder {
    val view = LayoutInflater.from(viewGroup.context).inflate(R.layout.contact_item_layout,viewGroup,false)
    return ContactViewHolder(view)
}

override fun onBindViewHolder(holder: ContactViewHolder, position: Int) {
    val contact = contactList[position]
    holder.name!!.text = contact.contactName
    holder.mobile!!.text = contact.contactNumber[0]
    Glide.with(holder.itemView.context)
            .load(contact.contactImage)
            .into(holder.image)
}

override fun getItemCount(): Int = contactList.size

class ContactViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
    var image : ImageView = itemView.find(R.id.contact_image) as ImageView
    var name : TextView? = itemView.find(R.id.contact_name) as TextView
    var mobile : TextView? = itemView.find(R.id.contact_mobile) as TextView
}

}

Любая помощь будет принята с благодарностью.

Спасибо

...