【问题标题】:How to clear Picasso cache memory in android如何在android中清除毕加索缓存
【发布时间】:2019-05-26 00:09:50
【问题描述】:

我的图像有问题我试图从列表中的服务器获取图像但是如果我从应用程序更新图像它会成功进入服务器但是当我获取新数据时我得到旧图像我已经清除了Picasso缓存内存旧图像显示 这是我的代码。有没有其他解决方案可以清除Picasso的缓存

public class WorkerListAdapter extends RecyclerView.Adapter<WorkerListAdapter.MyViewHolder> {
    private static final int REQUEST_PHONE_CALL = 1;
    private List<ItemWorkerList> itemWorkerListList;
    private Context context;


    public class MyViewHolder extends RecyclerView.ViewHolder {

        public TextView tv_worker_name, tv_worker_type;
        public CircleImageView iv_worker_image;
        public ImageView iv_worker_images;
        ImageView iv_edit_provider;
        public LinearLayout ll_doc;
        public ProgressBar pb_worker;

        public MyViewHolder(View view) {
            super(view);
            this.setIsRecyclable(true);

            tv_worker_name = (TextView) view.findViewById(R.id.tv_worker_name);
            tv_worker_type = (TextView) view.findViewById(R.id.tv_worker_type);
            iv_edit_provider = (ImageView) view.findViewById(R.id.iv_edit_provider);
            iv_worker_image = (CircleImageView) view.findViewById(R.id.iv_worker_image);

            iv_edit_provider = (ImageView) view.findViewById(R.id.iv_edit_provider);
            pb_worker = (ProgressBar) view.findViewById(R.id.pb_worker);

        }
    }


    public WorkerListAdapter(Context context, ArrayList<ItemWorkerList> itemWorkerListList) {
        this.context = context;
        this.itemWorkerListList = itemWorkerListList;

    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())

                .inflate(R.layout.item_worker_list, parent, false);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        final ItemWorkerList itemWorkerList = itemWorkerListList.get(position);
        holder.tv_worker_name.setText(itemWorkerList.getName());
        holder.tv_worker_type.setText(itemWorkerList.getCategory());

        Picasso.get().invalidate(itemWorkerList.getImage());
        Picasso.get().invalidate(itemWorkerList.getDocument());
        if (!TextUtils.isEmpty(itemWorkerList.getImage())) {

            Picasso.get().load(itemWorkerList.getImage()).memoryPolicy(MemoryPolicy.NO_CACHE, MemoryPolicy.NO_STORE).into(holder.iv_worker_image, new Callback() {
                @Override
                public void onSuccess() {
                    holder.pb_worker.setVisibility(View.GONE);
                }


                @Override
                public void onError(Exception e) {

                    holder.pb_worker.setVisibility(View.GONE);
                    Picasso.get().load(R.drawable.dummy).into(holder.iv_worker_image);
                }
            });
}

【问题讨论】:

  • 使用 skipMemoryCache 这个
  • 我可以使用skipMemoryCache代替memorypolicy

标签: android image picasso


【解决方案1】:

你可以这样做 -

Picasso.with(context).load(your_url).networkPolicy(NetworkPolicy.NO_CACHE)
        .memoryPolicy(MemoryPolicy.NO_CACHE)
        .into(your_image_view);

【讨论】:

  • 也试试添加networkPolicy(NetworkPolicy.NO_CACHE)
  • 希望对你有帮助
【解决方案2】:
public class Clear {

public static void clearCache (Picasso p) {
    p.cache.clear();
}}

这样使用。

Clear.clearCache(Picasso.with(context));

Clear 类必须在包中:

因为无法从该包外部访问缓存。就像在这个答案中一样:https://stackoverflow.com/a/23544650/4585226

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 2016-08-10
    • 2016-03-17
    • 2015-02-14
    • 2016-01-20
    • 2015-05-07
    • 2016-04-28
    • 2016-12-31
    • 2014-11-03
    相关资源
    最近更新 更多