【问题标题】:Error loading image url with Glide使用 Glide 加载图片 url 时出错
【发布时间】:2021-11-22 15:42:04
【问题描述】:

我要做的是使用图像 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);
        }
  }

【问题讨论】:

  • 检查您的 mContext。可能您没有正确初始化上下文,因此它是导致问题的 null。
  • @oathkeeper 我已经更新了我的代码。请检查

标签: android android-glide


【解决方案1】:

这样做:

public SampleAdapter(List<SampleModel> sampleModelList, Context context) {
    this.list = sampleModelList;
    mContext = context ;
}

【讨论】:

    【解决方案2】:

    在此之前:

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

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

    【讨论】:

      【解决方案3】:

      其实只要你的ImageViewholder.cover不是null,你就可以方便地使用holder.cover.getContext()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多