【问题标题】:Picasso loads 6 images only from cachePicasso 仅从缓存中加载 6 张图片
【发布时间】:2019-04-11 02:33:18
【问题描述】:

由于某种原因,毕加索只显示了 20 张图片中的 6 张。它会显示前 6 张图片,然后重复它们。我正在从网络上获取图像。

有什么想法吗?

Picasso.get().load(response.body().getMediaDetails()
.getSizes().getFull().getSourceUrl())
.fetch(new com.squareup.picasso.Callback() {
  @Override
  public void onSuccess() {}

  @Override
  public void onError(Exception e) {

    // Try again online if cache failed
    Picasso.get()
   .load(response.body().getMediaDetails().getSizes().getFull().getSourceUrl())
    .placeholder(R.drawable.test_img_size)
    .error(R.drawable.test_img_size)
    .into(imageView);

  }
});

ViewAdapter.java

import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.v7.widget.CardView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class RecyclerViewAdapter extends 
 RecyclerView.Adapter<RecyclerView.ViewHolder> {

private ArrayList<Model> dataset;
private Context mContext;
private ArrayList<Model> list;
private RecyclerViewAdapter adapter;
private RecyclerView recyclerView;
private LinearLayoutManager mLayoutManager;
public static List<WPPost> mListPost;
ArrayList<String> imagepath = new ArrayList<>();
private String baseURL = "https://www.myfitbytes.com/";

public RecyclerViewAdapter(ArrayList<Model> mlist, Context context) {
    this.dataset = mlist;
    this.mContext = context;
}

public static class ImageTypeViewHolder extends RecyclerView.ViewHolder{


    TextView title, subtitle, date;
    ImageView imageView;
    CardView cardview;

    public ImageTypeViewHolder(View itemView) {
        super(itemView);

        this.title = (TextView)  itemView.findViewById(R.id.title);
      //this.subtitle = (TextView) itemView.findViewById(R.id.subtitle);
        this.date = (TextView) itemView.findViewById(R.id.date);
        this.imageView = (ImageView) itemView.findViewById(R.id.Icon);
        this.cardview = (CardView) itemView.findViewById(R.id.cardview);
    }
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from( parent.getContext()).inflate(R.layout.postdetails, parent, false);





    return new ImageTypeViewHolder(view) ;
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
    final Model object = dataset.get(position);
   // Log.d("RecyclerViewAdapter", "IMAGE="+object.Image);
    imagepath.add(position, "");

    if (Build.VERSION.SDK_INT >= 24)
    {
        //( (ImageTypeViewHolder) holder).subtitle.setText(Html.fromHtml(object.subtitle , Html.FROM_HTML_MODE_LEGACY));
        ( (ImageTypeViewHolder) holder).title.setText( Html.fromHtml(object.title , Html.FROM_HTML_MODE_LEGACY) );
        ( (ImageTypeViewHolder) holder).date.setText( Html.fromHtml(object.date , Html.FROM_HTML_MODE_LEGACY) );
    }
    else
    {
        //( (ImageTypeViewHolder) holder).subtitle.setText(Html.fromHtml(object.subtitle ));
        ( (ImageTypeViewHolder) holder).title.setText( Html.fromHtml(object.title ));
        ( (ImageTypeViewHolder) holder).date.setText( Html.fromHtml(object.date ));
    }


      ( (ImageTypeViewHolder) holder).imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(mContext, WPPostDetails.class);
            intent.putExtra("itemPosition", position);
            mContext.startActivity(intent);
        }
    });



    try {
        getthumbnail(object.Image, ( (ImageTypeViewHolder) holder).imageView, position);



    }catch (Exception e){
     //   Log.e("adapter ","failed to get image "+e.toString() );
    }
    /// dataset.get(position)



}


public void getthumbnail(String imageurl, final ImageView imageView, final int position){

    ServiceWrapper serviceWrapper = new ServiceWrapper(null);
    Call<GetThumbnail> call = serviceWrapper.getThumbnailCall(imageurl);
    call.enqueue(new Callback<GetThumbnail>() {


        @Override
        public void onResponse(Call<GetThumbnail> call, final Response<GetThumbnail> response) {
            if (response.body() != null && response.isSuccessful()) {
                try {

                    if (response.body().getMediaDetails()!=null){

                       // Log.e("recycler adapter", " image is here--  " + response.body().getMediaDetails().getSizes().getThumbnail().getSourceUrl());
                       // Log.e("Full IMG SIZE - ", " THIS IS FULL IMAGE URL--  " + response.body().getMediaDetails().getSizes().getFull().getSourceUrl());

                        imagepath.add(position, response.body().getMediaDetails().getSizes().getFull().getSourceUrl());


                        Picasso.get()
                                .load(response.body().getMediaDetails().getSizes().getFull().getSourceUrl())
                                .fetch(new com.squareup.picasso.Callback() {
                                    @Override
                                    public void onSuccess() {


                                    }

                                    @Override
                                    public void onError(Exception e) {

                                        // Try again online if cache failed
                                        Picasso.get()
                                                .load(response.body().getMediaDetails().getSizes().getFull().getSourceUrl())
                                                .placeholder(R.drawable.test_img_size)
                                                .error(R.drawable.test_img_size)
                                                .into(imageView);

                                    }
                                });


//Glide.with(mContext)                                    
//.load(response.body().getMediaDetails().getSizes().getFull().getSourceUrl())
//.downloadOnly(new SimpleTarget<File>() {
//@Override
//public void onResourceReady(File resource, GlideAnimation<? super File> 
//glideAnimation) {
//Glide.with(mContext)

//.load(response.body().getMediaDetails().getSizes().getFull().getSourceUrl())                                                    
//.diskCacheStrategy(DiskCacheStrategy.SOURCE)
 //.into(imageView);
 //}
 //});


                    }else {

                    }
                }catch (Exception e){
                   // Log.e("adapter", "fail not media tag "+ e.toString());
                }

            }
        }

        @Override
        public void onFailure(Call<GetThumbnail> call, Throwable t) {

          //  Log.e("adapter", " faile  image "+t.toString());
        }
    });

}




@Override
public int getItemCount() {

    return dataset.size() ;
  }
 }

所以,正如一些人建议的那样,正如您所见,我尝试使用 glade 但它没有用。 问题是一样的,当用户向上和向下滚动时,图像会一遍又一遍地重新加载。而且,有时它只缓存 20 张图片中的 6 张(它应该缓存每张图片,这样应用程序将显示缓存中的图片,而不是从网络获取)

【问题讨论】:

    标签: android image picasso


    【解决方案1】:

    如果您的问题是缓存,请尝试使用方法 skipMemoryCache()memoryPolicy(MemoryPolicy.NO_CACHE)

    【讨论】:

    • 好吧..需要他们缓存,因为如果他们不缓存,那么下次用户打开应用程序时会很慢
    • 问题还在于,如果我不缓存图像,每次用户上下滚动应用程序时都会尝试一次又一次地获取图像......并使应用程序变慢......任何解决方案?即使我必须使用 Glide
    • 请发布您的 RecyclerView 或 Listview 代码,以便更好地了解问题...
    • 请测试在onSuccess方法内的onError方法上插入代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 2016-09-20
    • 2014-09-23
    • 1970-01-01
    • 2015-05-16
    • 2015-11-25
    相关资源
    最近更新 更多