У меня есть RecyclerViewAdapter, который в onBindViewHolder выполняет вызов AsyncTask для загрузки изображения, требуемого из облачного хранилища Google.
В RecyclerViewAdapter есть некоторые элементы, которые вызывают одно и то же изображение.Я пытался справиться с этим, загружая изображение только в том случае, если оно еще не существует в локальном хранилище файлов;в противном случае, если это произойдет, то он использует изображение, которое уже было загружено.
Теперь, что происходит, если есть несколько элементов из RecyclerView, вызывающих одно и то же изображение в достаточно близкое время, один из элементовImageView будет просто пустым / белым, но остальные будут отображать изображение правильно.
Я надеялся, что смогу запечатлеть этот сценарий и просто использовать Thread.sleep
, а затем попытаться снова получить / использовать файлно я не получаю никаких исключений или чего-то подобного, поэтому я не уверен, как даже запечатлеть этот сценарий, чтобы справиться с ним.
Единственное, что я вижу в logcat, который выглядит отдаленно полезным, этониже:
D/skia: --- Failed to create image decoder with message 'unimplemented'
Однако оно не выдает исключение, оно просто регистрирует его как сообщение.
Однако оно указывает на проблему с декодированиемизображения.Поэтому я проверил документацию BitmapFactory.decodeFile
и там написано, что она возвращает ноль, если не может его декодировать.Поэтому я попытался проверить, было ли мое растровое изображение пустым после попытки декодирования, но оно никогда не попадало в этот оператор IF, означая, что оно никогда не возвращало нулевое значение, поэтому я не уверен, что делать.
new Getlogos(holder.logoImageView.getTag().toString(), holder.itemView.getContext(), new Getlogos.AsyncResponse() {
@Override
public void returnBitmapURI(String URI, String tag) {
if (holder.logoImageView != null && holder.logoImageView.getTag().toString().equals(tag)) {
if (URI.contains("drawable://")) {
int id = Integer.parseInt(URI.substring(11));
Bitmap myBitmap = BitmapFactory.decodeResource(context.getResources(), id);
holder.logoImageView.setImageBitmap(myBitmap);
} else {
Bitmap myBitmap = BitmapFactory.decodeFile(URI);
holder.logoImageView.setImageBitmap(myBitmap);
}
}
}
}).execute();
Проблема возникает толькоиногда и это не происходит с одним и тем же изображением последовательно.обычно он варьируется между некоторыми элементами, имеющими одно и то же изображение для загрузки / использования.Иногда это вообще не происходит.
Может ли кто-нибудь пролить свет на то, откуда приходит это сообщение skia и как я могу перехватить его, когда оно не удается декодировать, чтобы я мог обработать его?