簡體   English   中英

如何清除Android中的畢加索緩存

[英]How to clear Picasso cache memory in android

我有圖像問題,我正在嘗試從列表中的服務器獲取圖像,但是如果我從應用程序更新圖像,它將成功進入服務器,但是當我獲取新數據時,我得到了舊圖像,我已經清除了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);
                }
            });
}

你可以這樣做 -

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

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

這樣使用。

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

Clear類必須在包中:

因為無法從該程序包外部訪問緩存。 像這個答案一樣: https : //stackoverflow.com/a/23544650/4585226

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM