使用 Glide 加载图像 url 时出错
Error loading image url with Glide
我想做的是使用图像 url 显示图像,我正在使用 glide 库加载这些图像,但是每当我尝试 运行 应用程序时,图片无法显示或无法在 activity 上加载。我能看到显示的文字,但看不到图像
这是我遇到的错误
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);
}
}
这样做:
public SampleAdapter(List<SampleModel> sampleModelList, Context context) {
this.list = sampleModelList;
mContext = context ;
}
在此之前:
Glide.with(mContext).load(image)
.placeholder(R.drawable.placeholder)
.dontAnimate()
.fitCenter()
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(holder.cover);
mContext 未分配任何上下文值。它仍然具有您初始化的值(即 null)。因此,您需要按照@Kapta 的建议分配其值,并将上下文作为 SampleAdapter 构造函数中的参数传递。
实际上,只要您的 ImageView holder.cover
不是 null
,您就可以方便地使用 holder.cover.getContext()
。
我想做的是使用图像 url 显示图像,我正在使用 glide 库加载这些图像,但是每当我尝试 运行 应用程序时,图片无法显示或无法在 activity 上加载。我能看到显示的文字,但看不到图像
这是我遇到的错误
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);
}
}
这样做:
public SampleAdapter(List<SampleModel> sampleModelList, Context context) {
this.list = sampleModelList;
mContext = context ;
}
在此之前:
Glide.with(mContext).load(image)
.placeholder(R.drawable.placeholder)
.dontAnimate()
.fitCenter()
.crossFade()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(holder.cover);
mContext 未分配任何上下文值。它仍然具有您初始化的值(即 null)。因此,您需要按照@Kapta 的建议分配其值,并将上下文作为 SampleAdapter 构造函数中的参数传递。
实际上,只要您的 ImageView holder.cover
不是 null
,您就可以方便地使用 holder.cover.getContext()
。