Проблема с отображением фото в ImageView на разных устройствах

В приложении есть RecyclerView и у каждого элемента есть ImageView. В адаптере я пробовал установить фото 3-мя разными способами: .setImageURI(), Bitmap и при помощи Picasso. Все замечательно работает на Realme 6 Pro(android 10), Samsung Galaxy A3(android 5) и Huawei Note 2(android 8). На Redmi 4X (android 7.1.2), когда я выбираю фото все нормально, но если перезагрузить приложение фото исчезает. Что бы это могло быть? Также перед установкой фото я проверяю права WRITE_EXTERNAL_STORAGE и READ_EXTERNAL_STORAGE.

Код адаптера:

class DiaryListAdapter internal constructor(
    context: Context
) : RecyclerView.Adapter<DiaryListAdapter.DiaryViewHolder>() {

    private val inflater: LayoutInflater = LayoutInflater.from(context)

    private val mContext = context

    private var diaries = emptyList<ExtendedDiary>()

    private val permissionRequestCode = 11
    private val permissionsList = arrayOf(
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.READ_EXTERNAL_STORAGE
    )

    class DiaryItemDiffCallBack(
        private var oldDiaryList: List<ExtendedDiary>,
        private var newDiaryList: List<ExtendedDiary>
    ): DiffUtil.Callback() {
        override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
            return (oldDiaryList[oldItemPosition].diary.id == newDiaryList[newItemPosition].diary.id)
        }
        override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
            return oldDiaryList[oldItemPosition] == newDiaryList[newItemPosition]
        }
        override fun getOldListSize(): Int {
            return oldDiaryList.size
        }
        override fun getNewListSize(): Int {
            return newDiaryList.size
        }
    }

    inner class DiaryViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

        private val diaryImageView: ImageView = itemView.findViewById(R.id.imageView)

        fun bindView(extDiary: ExtendedDiary) {
            // photo
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (checkPermission(mContext, permissionsList)) {
                    if (extDiary.diary.img != null && extDiary.diary.img != "") {

                        // trying to set an image with Picasso
                        Picasso.with(mContext).load(extDiary.diary.img).into(diaryImageView)

                        // using simple setImageURI
                        //val uriImage = Uri.parse(extDiary.diary.img)
                        //diaryImageView.setImageURI(uriImage)

                        // using Bitmap
                        //val bitmap: Bitmap
                        //if (Build.VERSION.SDK_INT >= 28) {
                        //    val source: ImageDecoder.Source = ImageDecoder.createSource(
                        //        mContext.getApplicationContext().getContentResolver(),
                        //        uriImage
                        //    )
                        //    try {
                        //        bitmap = ImageDecoder.decodeBitmap(source)
                        //        diaryImageView.setImageBitmap(bitmap)
                        //    } catch (e: IOException) {
                        //        e.printStackTrace()
                        //    }
                        //} else {
                        //    try {
                        //        bitmap = MediaStore.Images.Media.getBitmap(
                        //            mContext.getApplicationContext()
                        //                .getContentResolver(), uriImage
                        //        )
                        //        diaryImageView.setImageBitmap(bitmap)
                        //    } catch (e: IOException) {
                        //        e.printStackTrace()
                        //    }
                        //}

                    } else
                        diaryImageView.setImageResource(R.drawable.logo)
                } else {
                    requestPermissions(mContext as Activity, permissionsList, permissionRequestCode)
                }
            } else {
                if (extDiary.diary.img != null && extDiary.diary.img != "") {
                    Picasso.with(mContext).load(extDiary.diary.img).into(diaryImageView)
                }
                else
                    diaryImageView.setImageResource(R.drawable.logo)
            }
        }
    }

    private fun checkPermission(context: Context, permissions: Array<String>) : Boolean {
        var allSuccess = true
        for(i in permissions.indices) {
            if(checkCallingOrSelfPermission(context, permissions[i]) == PermissionChecker.PERMISSION_DENIED) {
                allSuccess = false
            }
        }
        return allSuccess
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DiaryViewHolder {
        val itemView = inflater.inflate(R.layout.recyclerview_layout, parent, false)
        return DiaryViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: DiaryViewHolder, position: Int) {
        holder.bindView(diaries[position])
    }

    internal fun setDiaries(diaries: List<ExtendedDiary>) {
        val oldList = this.diaries
        val diffResult : DiffUtil.DiffResult = DiffUtil.calculateDiff(
            DiaryItemDiffCallBack(oldList, diaries)
        )
        this.diaries = diaries
        diffResult.dispatchUpdatesTo(this)
    }

    override fun getItemCount() = diaries.size
}

ExtendedDiary содержит Diary который содержит поле String под названием 'img'.


Ответы (0 шт):