滑动 FileNotFoundException
Glide FileNotFoundException
سلامعليكم
我想用 Glide 加载图像,但出现此错误:
java.io.FileNotFoundException: https://via.placeholder.com/600/1e5390
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:102)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:56)
at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)
at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)
at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)
at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:276)
at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory.run(GlideExecutor.java:393)
这是图像 url:
https://via.placeholder.com/600/1e5390
这是 Glide 代码:
@BindingAdapter("imageUrl")
fun ImageView.bindImage( imgUrl: String?) {
imgUrl?.let {
val imgUri = imgUrl.toUri().buildUpon().scheme("https").build()
Glide.with(this.context)
.load(imgUri)
.apply(
RequestOptions()
.error(R.drawable.ic_broken_image)
)
.into(this)
}
}
并在这里使用它:
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
app:imageUrl="@{photoObject.photoUrl}"
app:srcCompat="@drawable/ic_broken_image" />
谢谢:))
这解决了我的问题:
val theImage = GlideUrl(
imgUrl, LazyHeaders.Builder()
.addHeader("User-Agent", "5")
.build()
)
将用户代理 header 添加到 Glide
完整代码:
@BindingAdapter("imageUrl")
fun ImageView.bindImage( imgUrl: String?) {
val theImage = GlideUrl(
imgUrl, LazyHeaders.Builder()
.addHeader("User-Agent", "5")
.build()
)
theImage.let {
Glide.with(this.context)
.load(theImage)
.apply(
RequestOptions()
.error(R.drawable.ic_broken_image)
)
.into(object : CustomViewTarget<ImageView, Drawable>(this) {
override fun onLoadFailed(errorDrawable: Drawable?) {}
override fun onResourceCleared(placeholder: Drawable?) {}
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
this@bindImage.setImageDrawable(resource)
}
}) }
}
سلامعليكم
我想用 Glide 加载图像,但出现此错误:
java.io.FileNotFoundException: https://via.placeholder.com/600/1e5390
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:238)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadDataWithRedirects(HttpUrlFetcher.java:102)
at com.bumptech.glide.load.data.HttpUrlFetcher.loadData(HttpUrlFetcher.java:56)
at com.bumptech.glide.load.engine.SourceGenerator.startNextLoad(SourceGenerator.java:70)
at com.bumptech.glide.load.engine.SourceGenerator.startNext(SourceGenerator.java:63)
at com.bumptech.glide.load.engine.DecodeJob.runGenerators(DecodeJob.java:310)
at com.bumptech.glide.load.engine.DecodeJob.runWrapped(DecodeJob.java:276)
at com.bumptech.glide.load.engine.DecodeJob.run(DecodeJob.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
at com.bumptech.glide.load.engine.executor.GlideExecutor$DefaultThreadFactory.run(GlideExecutor.java:393)
这是图像 url: https://via.placeholder.com/600/1e5390
这是 Glide 代码:
@BindingAdapter("imageUrl")
fun ImageView.bindImage( imgUrl: String?) {
imgUrl?.let {
val imgUri = imgUrl.toUri().buildUpon().scheme("https").build()
Glide.with(this.context)
.load(imgUri)
.apply(
RequestOptions()
.error(R.drawable.ic_broken_image)
)
.into(this)
}
}
并在这里使用它:
<androidx.appcompat.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:scaleType="centerCrop"
app:imageUrl="@{photoObject.photoUrl}"
app:srcCompat="@drawable/ic_broken_image" />
谢谢:))
这解决了我的问题:
val theImage = GlideUrl(
imgUrl, LazyHeaders.Builder()
.addHeader("User-Agent", "5")
.build()
)
将用户代理 header 添加到 Glide
完整代码:
@BindingAdapter("imageUrl")
fun ImageView.bindImage( imgUrl: String?) {
val theImage = GlideUrl(
imgUrl, LazyHeaders.Builder()
.addHeader("User-Agent", "5")
.build()
)
theImage.let {
Glide.with(this.context)
.load(theImage)
.apply(
RequestOptions()
.error(R.drawable.ic_broken_image)
)
.into(object : CustomViewTarget<ImageView, Drawable>(this) {
override fun onLoadFailed(errorDrawable: Drawable?) {}
override fun onResourceCleared(placeholder: Drawable?) {}
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
this@bindImage.setImageDrawable(resource)
}
}) }
}