在 ImageView 中显示图像并将其保存到 Android 上的内部存储

问题描述

我正在使用 firebase 存储中的 picasso 库在 recyclerview 中显示一些图像,我想要实现的是在图像视图中显示图像后立即将图像保存到特定于应用程序的内部存储中。

然后当我下次打开应用程序时我想从内部存储中获取图像,如果图像在那里不可用,则从 firebase url 中获取它。我可以使用 Picasso 库显示图像,但后来我被卡住了,我刚刚开始 android 开发,不知道如何从这里开始。下面是我的代码

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {
    private List<LoadImage> loadImages;
    private Map<String,Bitmap> mBitmaps = new HashMap<>();

    public ImageAdapter(List<LoadImage> loadImages) {
        this.loadImages = loadImages;
    }

    @NonNull
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_view,parent,false);
        return new ImageViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ImageViewHolder holder,int position) {
        LoadImage currentimage = loadImages.get(position);

        Picasso.get()
                .load(currentimage.getimageUrl())
                .fit()
                .into(holder.imageViewDownload);
    }

    @Override
    public int getItemCount() {
        return loadImages.size();
    }

    public class ImageViewHolder extends RecyclerView.ViewHolder {

        ImageView imageViewDownload;

        public ImageViewHolder(@NonNull View itemView) {
            super(itemView);

            imageViewDownload = itemView.findViewById(R.id.image_view_download);
        }
    }
}

解决方法

您无需将图像保存到内部存储器。 Picasso 库会在您加载图像时为您执行此操作,它将图像缓存到特定于应用程序的目录中。下次如果可用,它将加载缓存的图像,如果没有,它将从 url 下载图像并缓存