Android:RecyclerView缩略图始终空白?我的Glide使用方式是否正确?
Glide 加载 Google Books 缩略图异常问题
项目基本情况
- 开发中的Android应用为图书搜索工具,通过Google Books API获取匹配关键词的图书数据
- API返回的图书字段包含标题、作者、出版日期、缩略图URI
- 当前已实现RecyclerView列表的文本字段正常渲染,仅缩略图加载存在异常
- 异常表现:使用Glide加载缩略图时图片始终空白,设置占位图后长期停留在占位图状态
- 已完成配置:Gradle文件中添加Glide 4.11.0依赖及对应注解处理器
implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
- 调试验证:存储缩略图地址的
mThumbnail变量非空,对应URI可正常访问
附带代码
RecyclerView条目布局(book_item.xml)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto" android:paddingTop="10dp" android:paddingBottom="10dp" android:paddingEnd="16dp" android:paddingLeft="16dp" android:paddingStart="16dp" android:paddingRight="16dp" android:orientation="horizontal"> <ImageView android:id="@+id/book_thumbnail" android:layout_width="100dp" android:layout_height="150dp" <!--app:layout_constraintDimensionRatio = "4:5.5"--> /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" android:visibility="visible"> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="Le petit prince" /> <TextView android:id="@+id/authors" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="Antoine-Saint Exupery" /> <TextView android:id="@+id/publishedDate" android:layout_width="wrap_content" android:layout_height="wrap_content" tools:text="1943" /> </LinearLayout> </LinearLayout>
列表适配器代码(BookListAdapter.java)
package com.example.booksearch; import android.content.Context; import android.graphics.Bitmap; import android.net.Uri; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Filter; import android.widget.Filterable; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; /** * RecyclerView 列表适配器 */ public class BookListAdapter extends RecyclerView.Adapter<BookListAdapter.BookViewHolder>{ private LayoutInflater mInflater; private final List<Book> mBookList; Context context; /** * 适配器构造方法 * @param context 应用上下文 * @param bookList 图书数据列表 */ public BookListAdapter(Context context, ArrayList<Book> bookList){ mInflater = LayoutInflater.from(context); this.mBookList = bookList; this.context = context; } /** * 清空适配器内所有数据 */ public void clear(){ mBookList.clear(); } /** * 批量添加图书数据到适配器 * @param books 待添加的图书列表 */ public void addAll(ArrayList<Book> books){ mBookList.addAll(books); } @NonNull @Override public BookViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View mItemView = mInflater.inflate(R.layout.book_item,parent, false); return new BookViewHolder(mItemView, this); } @Override public void onBindViewHolder(@NonNull BookListAdapter.BookViewHolder holder, int position) { String mTitle = mBookList.get(position).getTitle(); String mAuthor = mBookList.get(position).getAuthor(); String mPublishedDate = mBookList.get(position).getPublishedYear(); Uri mThumbnailUri = mBookList.get(position).getThumbnailUri(); holder.titleView.setText(mTitle); holder.authorView.setText(mAuthor); holder.publishedYearView.setText(mPublishedDate); if (!mThumbnailUri.toString().isEmpty()){ Glide.with(context) .load(mThumbnailUri.toString()) .override(100,200) //.placeholder(R.drawable.ic_baseline_book_24) .into(holder.thumbnailView); } else { Glide.with(context) .load(R.drawable.ic_baseline_book_24) .into(holder.thumbnailView); holder.thumbnailView.setImageAlpha(50); } } @Override public int getItemCount() { return mBookList.size(); } /** * 列表项 ViewHolder 内部类 */ class BookViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ public final TextView titleView; public final TextView authorView; public final TextView publishedYearView; public final ImageView thumbnailView; final BookListAdapter mAdapter; /** * ViewHolder 构造方法 * @param itemView 单个列表项的视图 * @param adapter 绑定的列表适配器 */ public BookViewHolder(View itemView, BookListAdapter adapter){ super(itemView); titleView = itemView.findViewById(R.id.title); authorView = itemView.findViewById(R.id.authors); publishedYearView = itemView.findViewById(R.id.publishedDate); thumbnailView = itemView.findViewById(R.id.book_thumbnail); this.mAdapter = adapter; itemView.setOnClickListener(this); } @Override public void onClick(View v) { } } }
核心疑问
当前代码中Glide加载缩略图的实现方式是否正确,为何出现图片长期无法加载的问题?
内容的提问来源于stack exchange,提问作者abrahamvee
相关产品推荐
相关产品推荐

