java - 尽管日志中的占位符图像和 URL 都正常工作,但 Glide 不会从 URL 加载图像

标签 java android android-glide

我正在尝试通过 Glide 库将图像加载到 RecyclerView 对象中,但无论我进行什么更改,我都无法成功加载图像。

'holder.image'(如下面的代码 fragment 所示)直接将图像插入到 RecyclerView ViewHolder 中,如果我包含它们,它会成功显示占位符图像。 此外,日志 fragment 显示我传入的 URL 链接,单击后图像会成功显示。

我尝试过多个不同版本的 Glide:4.9、4.4 和 3.7(最新的版本是我正在关注的教程中的版本,也是之前堆栈交换答案中推荐的版本)。

我已在 list 中包含以下权限: 以及只包含一个而不包含任何一个。

我尝试过 HTTPS 和 HTTP 链接以及来自不同站点的链接。 (包括直接从我遵循的教程中复制链接)。

下面是我的 RecyclerViewAdapter 类,删除了所有非图像变量。据我所知,唯一的关键部分是 onBindViewHolder 函数,因为占位符可以正常工作,但为了以防万一,我已经包含了完整的(简化的)类。

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
    private ArrayList<String> mImageAddresses = new ArrayList<>();

    public RecyclerViewAdapter(Context mContext, ArrayList<String> mImageAddresses) {
        this.mImageAddresses = mImageAddresses;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_entry, parent, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        Log.d(TAG, "onBindViewHolder: called. Address name: " + mImageAddresses.get(position));
        Glide.with(mContext)
            .load(mImageAddresses.get(position))
            .placeholder(R.drawable.ic_launcher_foreground)
            .into(holder.image);

        holder.parentLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.d(TAG, "onClick: clicked on: " + mTitles.get(position));
                Toast.makeText(mContext, "PLACEHOLDER", Toast.LENGTH_SHORT).show();
            }
        }
    }


    @Override
    public int getItemCount() {
        return mTitles.size(); //I have removed mTitles elsewhere for a more concise code snippet but it is successfully implemented
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        ImageView image;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.Icon);
        }
    }
}
2019-08-16 20:18:46.515 19359-19359/com.example.myapplication D/RecyclerViewAdapter: onBindViewHolder: called. Address name: http://c1.staticflickr.com/5/4636/25316407448_de5fbf183d_o.jpg

2019-08-16 20:18:46.745 19359-19359/com.example.myapplication D/RecyclerViewAdapter: onBindViewHolder: called. Address name: https://i.redd.it/obx4zydshg601.jpg

2019-08-16 20:18:46.764 19359-19359/com.example.myapplication D/RecyclerViewAdapter: onBindViewHolder: called. Address name: https://i.imgur.com/ZcLLrkY.jpg

上面是一些示例日志输出,使用了我遵循的教程中的图像。所有链接均可点击。日志中似乎没有出现错误。

最佳答案

一个常见的问题是位置是最终的

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Glide.with(mContext)
        .load(mImageAddresses.get(holder.getAdapterPosition()))
        .placeholder(R.drawable.ic_launcher_foreground)
        .into(holder.image);
}

关于java - 尽管日志中的占位符图像和 URL 都正常工作,但 Glide 不会从 URL 加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57530319/

相关文章:

java - 将 if-else-if 语句转换为 java 中的 switch 语句

java - 线程和用户界面

android - 在 GridView 中同步加载图像 - Android

Android 滑动加载位图

java - RecyclerView 花费太长时间从用户存储中填充大量视频

java - Orika 多态映射

java - 使用 Thymeleaf (Spring) 将代码从变量添加到 html head 标签中

java - Activity 结束后如何重置静态变量?

android - 在 React Native Android ViewManager 中公开 fragment

android - 注释处理器现在必须明确标示