У меня есть видоискатель, который показывает список пользователей с их аватаром. После входа в систему я загружаю все аватары и сохраняю их локально с именем файла, которое является идентификатором строки пользователя из mongo db. Когда файл аватара недоступен в хранилище, Пикассо загружает аватар другого пользователя случайным образом. Что я должен сделать, чтобы предотвратить это.
Это обычный код для отображения или загрузки изображения в случае недоступности
Я пытался использовать политики кэширования в Picasso, но это тоже не сработало.
public ImageUtils loadFromDisk(String id, ImageView target) {
Log.d(TAG, "loadFromDisk: imageId: " + id);
File directory = contextWrapper.getDir("avatars", Context.MODE_PRIVATE);
File avatarPath = new File(directory, id);
if (avatarPath.exists()) {
Log.d(TAG, "loadFromDisk: loaded from disk" + avatarPath);
Picasso.get().load(avatarPath)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.networkPolicy(NetworkPolicy.NO_CACHE)
.into(target);
} else {
Picasso.get().load(R.drawable.image_thumb).into(target);
}
return this;
}
Я вызываю loadFromDisk из класса Singleton ImageUtils в классе RecyclerView bindView.
PS: код bindViewHolder
public void onBindViewHolder(@NonNull RecentChatsViewHolder recentChatsViewHolder, int i) {
Log.d(TAG, "onBindViewHolder: content row");
if (recentChat.isNew) {
recentChatsViewHolder.blueDot.setVisibility(View.VISIBLE);
} else {
recentChatsViewHolder.blueDot.setVisibility(View.GONE);
}
recentChatsViewHolder.avatar.setImageResource(R.drawable.ic_info_outline_white_48dp);
ImageUtils.getInstance(context).loadFromDisk(recentChat.id, recentChatsViewHolder.avatar); //this calls above function here I don't pass the else condition of above method so there's no race condition
}