Почему я получаю сообщение «Канал безвозвратно сломан и будет удален!» ошибка, попытка загрузить большие изображения в рAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Почему я получаю сообщение «Канал безвозвратно сломан и будет удален!» ошибка, попытка загрузить большие изображения в р

Сообщение Anonymous »

У меня есть фрагмент галереи в моем приложении Android TV с горизонтальным recyclerView, где я пытаюсь показать изображения, загруженные с помощью Coil (они могут иметь большой размер, например 10 МБ, 20 МБ и т. д.). Требование состоит в том, что изображение должно заполнять фиксированный размер списка, а затем «обрезаться» по горизонтали до его размера.
Я получаю сообщение об ошибке: «Канал необратимо поврежден и будет удален!» и мое приложение вылетает, когда я пытаюсь быстро прокрутить ресайклер вправо, затем влево и так далее.
Вот мой фрагмент:< /p>

Код: Выделить всё

class ImageGalleryFragment : Fragment() {

private val navArgs by navArgs()
private val viewModel: ImageGalleryViewModel by viewModels {
ImageGalleryViewModelFactory(
requireContext(),
navArgs.movieId,
navArgs.materialId,
navArgs.isExclusive
)
}

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val binding = FragmentImageGalleryBinding.inflate(inflater, container, false)

viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
override fun onCreate(owner: LifecycleOwner) {
val imagesAdapter = ImageGalleryAdapter(lostFocus = {})

with(binding) {
rvImages.adapter = imagesAdapter
rvImages.addItemDecoration(
LinearHorizontalSpacingDecoration(
requireContext().resources.getDimension(
dimen.list_grid_small_item_horizontal_margin
).toInt(),
true
)
)
ivBack.setOnClickListener { findNavController().popBackStack() }
subscribers(imagesAdapter)
}
}

override fun onResume(owner: LifecycleOwner) {
viewModel.onEvent(Event.SendAnalyticsOnPageOpened)
super.onResume(owner)
}

override fun onDestroy(owner: LifecycleOwner) {
binding.rvImages.adapter = null
}
})

binding.ivBack.doOnLayout {
binding.ivBack.requestFocus()
}

return binding.root
}

private fun FragmentImageGalleryBinding.subscribers(
imageGalleryAdapter: ImageGalleryAdapter
) {
viewModel.state
.map { it.materialName }
.flowWithLifecycle(viewLifecycleOwner.lifecycle)
.distinctUntilChanged()
.filterNotNull()
.onEach { updateView(it) }
.launchIn(viewLifecycleOwner.lifecycleScope)

viewModel.state
.map { it.imageAssets }
.flowWithLifecycle(viewLifecycleOwner.lifecycle)
.distinctUntilChanged()
.filterNotNull()
.onEach { imagesList ->
imageGalleryAdapter.submitList(imagesList)
}
.launchIn(viewLifecycleOwner.lifecycleScope)
}

private fun FragmentImageGalleryBinding.updateView(galleryName: String) {
tvGalleryName.text = galleryName
}
}
Вот мой адаптер:

Код: Выделить всё

class ImageGalleryAdapter(
private val lostFocus: () ->  Unit,
) : ListAdapter(DiffUtils()) {

class DiffUtils : DiffUtil.ItemCallback() {

override fun areItemsTheSame(
old: ImageAsset,
new: ImageAsset
): Boolean = old.url == new.url

override fun areContentsTheSame(
old: ImageAsset,
new: ImageAsset
): Boolean = false
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ImageGalleryItemViewHolder(
ItemGalleryImageBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
),
)

override fun onBindViewHolder(holder: ImageGalleryItemViewHolder, position: Int) {
holder.onBind(item = getItem(position))
}
}
Вот мой viewHolder:

Код: Выделить всё

class ImageGalleryItemViewHolder(
private val view: ItemGalleryImageBinding,
) : RecyclerView.ViewHolder(view.root) {

fun onBind(item: ImageAsset) {
with(view) {
ivImage.load(item.url) {
crossfade(true)
crossfade(250)
placeholder(R.drawable.ic_gallery_image_placeholder)
}
}
}
}
А вот мой itemView xml: После поиска похожих проблем я обнаружил, что это могут быть некоторые проблемы, связанные с масштабированием больших изображений в recycler, но я пытался заменить любой масштаб фиксированным размером, но это не похоже работает.
Буду рад любой помощи или предложениям по этому вопросу.

Подробнее здесь: https://stackoverflow.com/questions/792 ... osed-error
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»