Glide 无法加载 url 此类图像
Glide unable to load url images of this type
我以前用过 Glide 很多很多次,但目前我在使用这种 url https://www.publicdomainpictures.net/pictures/10000/nahled/thinking-monkey-11282237747K8xB.jpg
显示图像时遇到问题,我不知道为什么我无法加载它。我什至简化了我的项目以仅在 MainActivity 上显示此图像。查看glide的Listener时提示这个错误
2021-02-19 21:39:43.438 31240-31240/com.y4kuzabanzai.testforvass E/MainActivity: onLoadFailed: com.bumptech.glide.load.engine.GlideException: Failed to load resource
There was 1 root cause:
com.bumptech.glide.load.HttpException(Failed to connect or obtain data, status code: 503)
call GlideException#logRootCauses(String) for more detail
问题是我已经尝试使用其他网址,它们工作得很好。有什么问题?这是我的简单代码
MainActivity.class
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var imageView: ImageView = findViewById(R.id.homeImage)
Glide.with(this)
.load("https://www.publicdomainpictures.net/pictures/10000/nahled/thinking-monkey-11282237747K8xB.jpg")
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean
): Boolean {
Log.e(TAG, "onLoadFailed: ${e}")
return false
}
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean
): Boolean {
return true
}
})
.into(imageView)
}
activity_main.layout
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
1. <ImageView
android:id="@+id/homeImage"
android:layout_width="418dp"
android:layout_height="492dp"
android:layout_marginStart="14dp"
android:layout_marginBottom="109dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:srcCompat="@tools:sample/avatars" /> </androidx.constraintlayout.widget.ConstraintLayout>
可能有些地方没有正确配置。检查这些。
首先,你不需要tools:srcCompat="@tools:sample/avatars"
第二个在 AndroidManifest.xml
文件的标签内。
android:usesCleartextTraffic="true"
glid中图片的大小规则你应该知道,因为glide中加载大图有问题
你可以试试这个也把android:largeHeap="true"
放到清单文件的标签里。
让我知道结果:)
更新
如果还不行,试试这个。
Glide.with(getContext())
.asBitMap() //[for new glide versions]
.load(url)
//.asBitmap()[for older glide versions]
//.placeholder(R.drawable.default_placeholder)
.override(1600, 1600) // Can be 2000, 2000
.into(new BitmapImageViewTarget(imageViewPreview) {
@Override
public void onResourceReady(Bitmap drawable, GlideAnimation anim) {
super.onResourceReady(drawable, anim);
}
});
或者这个
Glide.with('context')
.asBitmap()
.load('url')
.apply(new RequestOptions().override(1600, 1600)) //This is important
.into(new BitmapImageViewTarget('imageview') {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
super.onResourceReady(resource, transition);
imageview.setImageBitmap(resource);
}
});
我终于修好了!!!!问题是在必须添加 User-Agent 的情况下,您必须使用 header。在这里我是如何修复它的,请注意,因为我尝试了几件事,所以我的代码可能发生了一些变化,感谢 Faramarz Afzali 的时间。这是我的代码:
private val USER_AGENT = "Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.181 Mobile Safari/537.36"
val glideUrl = GlideUrl(
gnome.thumbnail,
LazyHeaders.Builder().addHeader("User-Agent", USER_AGENT).build())
val requestOptions = RequestOptions()
.placeholder(R.drawable.ic_launcher_background)
.error(R.drawable.ic_launcher_background)
GlideApp.with(itemView.context)
.applyDefaultRequestOptions(requestOptions)
.load(glideUrl)
.timeout(60000)
.override(320, 480)
.into(binding.gnomeImage)
正在清单中添加网络安全配置xml文件:
EN: Adding network security configuration xml file to the list:
res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">developer.alexanderklimov.ru/</domain>
</domain-config>
</network-security-config>
在AndroidManifest.xml
中添加网络安全配置:
EN: Add network security configuration in AndroidManifest.xml
:
<application
android:name=".MyApplication"
android:networkSecurityConfig="@xml/network_security_config" ... />
我以前用过 Glide 很多很多次,但目前我在使用这种 url https://www.publicdomainpictures.net/pictures/10000/nahled/thinking-monkey-11282237747K8xB.jpg
显示图像时遇到问题,我不知道为什么我无法加载它。我什至简化了我的项目以仅在 MainActivity 上显示此图像。查看glide的Listener时提示这个错误
2021-02-19 21:39:43.438 31240-31240/com.y4kuzabanzai.testforvass E/MainActivity: onLoadFailed: com.bumptech.glide.load.engine.GlideException: Failed to load resource
There was 1 root cause:
com.bumptech.glide.load.HttpException(Failed to connect or obtain data, status code: 503)
call GlideException#logRootCauses(String) for more detail
问题是我已经尝试使用其他网址,它们工作得很好。有什么问题?这是我的简单代码
MainActivity.class
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var imageView: ImageView = findViewById(R.id.homeImage)
Glide.with(this)
.load("https://www.publicdomainpictures.net/pictures/10000/nahled/thinking-monkey-11282237747K8xB.jpg")
.listener(object : RequestListener<Drawable> {
override fun onLoadFailed(e: GlideException?, model: Any?, target: Target<Drawable>?, isFirstResource: Boolean
): Boolean {
Log.e(TAG, "onLoadFailed: ${e}")
return false
}
override fun onResourceReady(resource: Drawable?, model: Any?, target: Target<Drawable>?, dataSource: DataSource?, isFirstResource: Boolean
): Boolean {
return true
}
})
.into(imageView)
}
activity_main.layout
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
1. <ImageView
android:id="@+id/homeImage"
android:layout_width="418dp"
android:layout_height="492dp"
android:layout_marginStart="14dp"
android:layout_marginBottom="109dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:srcCompat="@tools:sample/avatars" /> </androidx.constraintlayout.widget.ConstraintLayout>
可能有些地方没有正确配置。检查这些。
首先,你不需要
tools:srcCompat="@tools:sample/avatars"
第二个在
AndroidManifest.xml
文件的标签内。
android:usesCleartextTraffic="true"
glid中图片的大小规则你应该知道,因为glide中加载大图有问题
你可以试试这个也把
android:largeHeap="true"
放到清单文件的标签里。
让我知道结果:)
更新
如果还不行,试试这个。
Glide.with(getContext())
.asBitMap() //[for new glide versions]
.load(url)
//.asBitmap()[for older glide versions]
//.placeholder(R.drawable.default_placeholder)
.override(1600, 1600) // Can be 2000, 2000
.into(new BitmapImageViewTarget(imageViewPreview) {
@Override
public void onResourceReady(Bitmap drawable, GlideAnimation anim) {
super.onResourceReady(drawable, anim);
}
});
或者这个
Glide.with('context')
.asBitmap()
.load('url')
.apply(new RequestOptions().override(1600, 1600)) //This is important
.into(new BitmapImageViewTarget('imageview') {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
super.onResourceReady(resource, transition);
imageview.setImageBitmap(resource);
}
});
我终于修好了!!!!问题是在必须添加 User-Agent 的情况下,您必须使用 header。在这里我是如何修复它的,请注意,因为我尝试了几件事,所以我的代码可能发生了一些变化,感谢 Faramarz Afzali 的时间。这是我的代码:
private val USER_AGENT = "Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.181 Mobile Safari/537.36"
val glideUrl = GlideUrl(
gnome.thumbnail,
LazyHeaders.Builder().addHeader("User-Agent", USER_AGENT).build())
val requestOptions = RequestOptions()
.placeholder(R.drawable.ic_launcher_background)
.error(R.drawable.ic_launcher_background)
GlideApp.with(itemView.context)
.applyDefaultRequestOptions(requestOptions)
.load(glideUrl)
.timeout(60000)
.override(320, 480)
.into(binding.gnomeImage)
正在清单中添加网络安全配置xml文件:
EN: Adding network security configuration xml file to the list:
res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">developer.alexanderklimov.ru/</domain>
</domain-config>
</network-security-config>
在AndroidManifest.xml
中添加网络安全配置:
EN: Add network security configuration in AndroidManifest.xml
:
<application
android:name=".MyApplication"
android:networkSecurityConfig="@xml/network_security_config" ... />