代码之家  ›  专栏  ›  技术社区  ›  BXUMZSE

使用Glide加载图像url时出错

  •  1
  • BXUMZSE  · 技术社区  · 8 年前

    我正在尝试使用图像url显示图像,我正在使用glide库加载这些图像。然而,每当我尝试运行应用程序时,图像无法显示或不会加载到活动中。我可以看到正在显示的文本,但不能看到图像

    这就是我所犯的错误

    java.lang.IllegalArgumentException: You cannot start a load on a null Context
    11-11 03:23:01.713 5428-5428/? W/System.err:     at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:84)
    11-11 03:23:01.713 5428-5428/? W/System.err:     at com.bumptech.glide.Glide.with(Glide.java:629)
    

    这是代码

     public class SampleAdapter extends RecyclerView.Adapter <SampleAdapter.ViewHolder> {
    
        private List<SampleModel> list;
        private Context mContext = null;
    
        public SampleAdapter(List<SampleModel> sampleModelList) {
            this.list = sampleModelList;
        }
    
        @Override
        public SampleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sample_item, parent, false);
            return new ViewHolder(view);
        }
    
        @Override
        public void onBindViewHolder(WatchlistAdapter.ViewHolder holder, int position) {
    
           String image = "https://image.tmdb.org/t/p/w500/9HE9xiNMEFJnCzndlkWD7oPfAOx.jpg";
    
            try{
                   final SampleModel sample = list.get(holder.getAdapterPosition());
    
                   if(sample != null) {
                  holder.title.setText(sample.getTitle());
                  Glide.with(mContext).load(image)
                       .placeholder(R.drawable.placeholder)
                       .dontAnimate()
                       .fitCenter()
                       .crossFade()
                       .diskCacheStrategy(DiskCacheStrategy.ALL)
                       .into(holder.cover);
                } else {
                  Glide.clear(holder.cover);
                }
            } catch(Exception e) {
                 e.printStackTrace();
            }
        }
    
        @Override
        public int getItemCount() {
           return (list != null? list.size():0);
        }
    
        public class ViewHolder extends RecyclerView.ViewHolder {
    
            public TextView title;
            public ImageView cover;
    
            public ViewHolder(View itemView) {
                super(itemView);
                title = (TextView) itemView.findViewById(R.id.title);
                cover= (ImageView) itemView.findViewById(R.id.coverImage);
            }
      }
    
    3 回复  |  直到 8 年前
        1
  •  0
  •   Kapta    8 年前

    这样做:

    public SampleAdapter(List<SampleModel> sampleModelList, Context context) {
        this.list = sampleModelList;
        mContext = context ;
    }
    
        2
  •  0
  •   Sreeraj    3 年前

    在此之前:

     Glide.with(mContext).load(image)
                   .placeholder(R.drawable.placeholder)
                   .dontAnimate()
                   .fitCenter()
                   .crossFade()
                   .diskCacheStrategy(DiskCacheStrategy.ALL)
                   .into(holder.cover);
    

    mContext未分配任何上下文值。它仍然具有您初始化的值(即null)。因此,您需要按照@Kapta的建议分配它的值,并将上下文作为参数传递给SampleApter构造函数。

        3
  •  0
  •   Ryan Wong    3 年前

    实际上,只要您的ImageView holder.cover 不是 null 或者,您可以方便地使用 holder.cover.getContext() 为此。