无法在 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 一起工作,我将不胜感激。我的猜测是它与上下文有关。