无法在 recyclerview 中使用 glide 加载图像(recyclerview 的数据是使用改造提取的)
Can not load images with glide in recyclerview (data for recyclerview is fethced using retrofit)
我的目标是使用 API 获取多个图像 url 并将这些图像加载到 2d recyclerview 中。我正在使用改造来获取数据,并使用 Glide 在 recyclerview 中显示图像。
显然,获取 url 没有问题。但是 recyclerview 中没有加载图像,也没有显示任何异常或警告。
这是我初始化回收视图的方式:(Class: HdrPhotoFragment.java)
mRecyclerView = view.findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(
new GridLayoutManager(getContext(), SPAN_COUNT)
);
这是我在 onResponse()
中为获取模型和设置 recyclerview 适配器所做的工作:(Class: HdrPhotoFragment.java )
@Override
public void onResponse(Call<List<HdrPhotoListItemModel>> call, Response<List<HdrPhotoListItemModel>> response) {
Log.d(TAG, "onResponse: " + response.code());
if (response.code() != 200) {
Log.d(TAG, "onResponse: error fetching image data. CODE: ");
Toast.makeText(getContext(), "Error loading images", Toast.LENGTH_SHORT).show();
return;
}
mHdrPhotoModelList = response.body();
// Log.d(TAG, "onResponse: response body" + response.body().toString());
for (HdrPhotoListItemModel model : mHdrPhotoModelList) {
Log.d(TAG, "onResponse: Model = " + model.toString());
}
HdrPhotoListItemAdapter adapter = new HdrPhotoListItemAdapter(mHdrPhotoModelList, HdrPhotoFragment.this);
mRecyclerView.setAdapter(adapter);
}
这是我的 onBindViewHolder()
方法,我尝试使用滑行加载图像:(Class: HdrPhotoListItemAdapter.java)
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
HdrPhotoListItemModel itemModel = mHdrPhotoList.get(position);
// holder.imageView.setImageResource(itemModel.getImageUrl());
String url = Constants.BASE_URL + itemModel.getImageUrl();
Log.d(TAG, "onBindViewHolder: URL: " + url);
Glide.with(holder.imageView.getContext())
.load(url)
.into(holder.imageView);
}
需要注意的是onBindViewHolder()
得到的url是准确的
这应该有效
(Kotlin 中的代码片段)
Glide.with(holder.itemView.context).load(url).into(holder.itemView.findViewById(R.id.image))
检查url也一次
我不确定图片未加载的确切原因。使用 Picasso 库而不是 Glide 解决了这个问题。
在onBindViewHolder()
方法里面,我只是替换了
Glide.with(holder.imageView.getContext())
.load(url)
.into(holder.imageView);
以下行:
Picasso.get().load(url).into(holder.imageView);
虽然它可以工作,但如果有人能告诉我为什么它不能与 Glide 一起工作,我将不胜感激。我的猜测是它与上下文有关。
我的目标是使用 API 获取多个图像 url 并将这些图像加载到 2d recyclerview 中。我正在使用改造来获取数据,并使用 Glide 在 recyclerview 中显示图像。
显然,获取 url 没有问题。但是 recyclerview 中没有加载图像,也没有显示任何异常或警告。
这是我初始化回收视图的方式:(Class: HdrPhotoFragment.java)
mRecyclerView = view.findViewById(R.id.recycler_view);
mRecyclerView.setHasFixedSize(true);
mRecyclerView.setLayoutManager(
new GridLayoutManager(getContext(), SPAN_COUNT)
);
这是我在 onResponse()
中为获取模型和设置 recyclerview 适配器所做的工作:(Class: HdrPhotoFragment.java )
@Override
public void onResponse(Call<List<HdrPhotoListItemModel>> call, Response<List<HdrPhotoListItemModel>> response) {
Log.d(TAG, "onResponse: " + response.code());
if (response.code() != 200) {
Log.d(TAG, "onResponse: error fetching image data. CODE: ");
Toast.makeText(getContext(), "Error loading images", Toast.LENGTH_SHORT).show();
return;
}
mHdrPhotoModelList = response.body();
// Log.d(TAG, "onResponse: response body" + response.body().toString());
for (HdrPhotoListItemModel model : mHdrPhotoModelList) {
Log.d(TAG, "onResponse: Model = " + model.toString());
}
HdrPhotoListItemAdapter adapter = new HdrPhotoListItemAdapter(mHdrPhotoModelList, HdrPhotoFragment.this);
mRecyclerView.setAdapter(adapter);
}
这是我的 onBindViewHolder()
方法,我尝试使用滑行加载图像:(Class: HdrPhotoListItemAdapter.java)
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
HdrPhotoListItemModel itemModel = mHdrPhotoList.get(position);
// holder.imageView.setImageResource(itemModel.getImageUrl());
String url = Constants.BASE_URL + itemModel.getImageUrl();
Log.d(TAG, "onBindViewHolder: URL: " + url);
Glide.with(holder.imageView.getContext())
.load(url)
.into(holder.imageView);
}
需要注意的是onBindViewHolder()
得到的url是准确的
这应该有效 (Kotlin 中的代码片段)
Glide.with(holder.itemView.context).load(url).into(holder.itemView.findViewById(R.id.image))
检查url也一次
我不确定图片未加载的确切原因。使用 Picasso 库而不是 Glide 解决了这个问题。
在onBindViewHolder()
方法里面,我只是替换了
Glide.with(holder.imageView.getContext())
.load(url)
.into(holder.imageView);
以下行:
Picasso.get().load(url).into(holder.imageView);
虽然它可以工作,但如果有人能告诉我为什么它不能与 Glide 一起工作,我将不胜感激。我的猜测是它与上下文有关。