使用Glide库时ImageView无法显示图片URL的问题求助
Glide无法在RecyclerView的ImageView中加载图片URL
之前能正常获取图片URL并显示在RecyclerView项的ImageView里,修改后失效,无法定位问题原因。
布局代码
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="end" android:id="@+id/sentContent" android:gravity="end" android:clickable="true" android:paddingTop="10dp" android:paddingBottom="10dp" xmlns:app="http://schemas.android.com/apk/res-auto"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/sentTxtMsgL" android:clickable="true" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/sentMsgL" android:background="@drawable/sent_bg" android:clickable="true" android:paddingStart="15dp" android:paddingEnd="18dp" android:paddingTop="5dp" android:paddingBottom="5dp" android:minWidth="150dp" android:minHeight="40dp"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/msgViewLS" android:orientation="horizontal" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/sentMsg" android:maxWidth="250dp" android:text="" android:textColor="@color/black" android:textSize="16sp" android:textStyle="normal" android:layout_marginStart="22dp" android:layout_marginEnd="8dp" android:layout_marginTop="5dp" android:layout_marginBottom="5dp"/> </LinearLayout> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/timeSeenL" android:orientation="horizontal" app:layout_constraintTop_toBottomOf="@id/msgViewLS" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"> <ImageView android:layout_width="20dp" android:layout_height="15dp" android:id="@+id/sentMarkS" android:src="@drawable/sent_n" android:contentDescription="@string/todo" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> <ImageView android:layout_width="20dp" android:layout_height="15dp" android:id="@+id/sentRMarkS" android:src="@drawable/sent_r" android:visibility="gone" android:contentDescription="@string/todo" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> <ImageView android:layout_width="20dp" android:layout_height="15dp" android:id="@+id/seenMarkS" android:src="@drawable/seen_l" android:visibility="gone" android:contentDescription="@string/todo" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/dateTimeTxtS" android:text="@string/todo" android:layout_marginEnd="25dp" android:layout_marginTop="3dp" android:textSize="12sp" android:textColor="@color/gray" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout> </LinearLayout> <LinearLayout android:layout_width="200dp" android:layout_height="wrap_content" android:id="@+id/sentImgL" android:layout_margin="3dp" android:padding="6dp" android:gravity="center" android:maxWidth="200dp" android:orientation="vertical" android:background="@drawable/sent_img_bg" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/sentImgLL" android:layout_marginEnd="8dp" android:background="?selectableItemBackground" android:clickable="true"> <androidx.cardview.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/receivedImgCard" android:layout_marginEnd="8dp" android:layout_marginStart="5dp" app:cardCornerRadius="18dp"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/sentImg" android:src="@drawable/me_p" android:adjustViewBounds="true" android:scaleType="fitXY" android:layout_gravity="center" android:cropToPadding="true" android:contentDescription="@string/todo" /> </androidx.cardview.widget.CardView> </LinearLayout> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/dateTimeImgLS" android:layout_margin="3dp" android:orientation="horizontal"> <ImageView android:layout_width="20dp" android:layout_height="15dp" android:id="@+id/receivedIMarkS" android:src="@drawable/sent_n" android:contentDescription="@string/todo" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> <ImageView android:layout_width="20dp" android:layout_height="15dp" android:id="@+id/sentIRMarkS" android:src="@drawable/sent_r" android:visibility="gone" android:contentDescription="@string/todo" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> <ImageView android:layout_width="20dp" android:layout_height="15dp" android:id="@+id/seenIMarkS" android:src="@drawable/seen_l" android:visibility="gone" android:contentDescription="@string/todo" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/dateITimeTxtS" android:text="@string/todo" android:layout_marginStart="5dp" android:layout_marginTop="3dp" android:textSize="12sp" android:textColor="@color/gray" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@id/receivedIMarkS" /> </androidx.constraintlayout.widget.ConstraintLayout> </LinearLayout> <androidx.cardview.widget.CardView android:id="@+id/emojiSentAttach" android:layout_width="350dp" android:layout_height="60dp" android:layout_gravity="bottom" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:visibility="gone" android:elevation="1dp" android:translationZ="0dp" app:cardBackgroundColor="#FFFFFF" app:cardCornerRadius="20dp" app:cardElevation="2dp" app:cardPreventCornerOverlap="false" app:cardUseCompatPadding="true" app:contentPadding="0dp" app:layout_constraintTop_toTopOf="parent" app:layout_constraintEnd_toEndOf="parent"> <LinearLayout android:id="@+id/sentEmoL" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> </LinearLayout> </androidx.cardview.widget.CardView> </androidx.constraintlayout.widget.ConstraintLayout>
逻辑代码
if (currentMsg.type == "photo"){ viewHolder.binding.sentImgL.visibility = View.VISIBLE viewHolder.binding.sentTxtMsgL.visibility = View.GONE //holder.binding.sentImg.setImageURI(currentMsg.urlImg?.toUri()) Glide.with(holder.itemView.context).load(currentMsg.message).into(holder.binding.sentImg) }
排查建议
- 确认
currentMsg.message的有效性:打印该字段值,检查是否为空、缺少http/https前缀,或者是无效的图片链接。 - 检查Glide依赖:确认build.gradle中Glide的依赖配置未被误删,无版本冲突。
- 验证ImageView布局:确认
sentImg未被父布局遮挡,且自身visibility属性正常。 - 添加Glide错误监听,获取加载失败详情:
Glide.with(holder.itemView.context) .load(currentMsg.message) .listener(new RequestListener<Drawable>() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) { e.printStackTrace(); return false; } @Override public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) { return false; } }) .into(holder.binding.sentImg);
- 检查网络权限:若加载网络图片,确保AndroidManifest.xml中已添加
<uses-permission android:name="android.permission.INTERNET"/>。 - 排查混淆问题:若开启代码混淆,确认proguard规则中已包含Glide的相关配置。
内容的提问来源于stack exchange,提问作者Mahmoud Nabil
相关产品推荐
相关产品推荐

