Glide FileNotFoundException



سلام عليكم

我想用滑动加载图像,但我得到了这个错误:

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$1.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()
)

添加用户代理头到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)
}
})    }
}
@BindingAdapter("app:setPhoto")
fun ImageView.setPhoto(purl: String?) {
val theImage = GlideUrl(
purl,LazyHeaders.Builder()
.addHeader("User-Agent", "5")
.build()
)
theImage.let {
Glide.with(this.context)
.load(theImage)
.into(this)
}
}

我的解决方案,get agent:

val agent = WebView(this.context).settings.userAgentString
val glideUrl = GlideUrl(
"url_here",
LazyHeaders.Builder().addHeader("User-Agent", agent).build()
)
Glide.with(context)
.asBitmap()
.load(glideUrl)
.into(this)

最新更新