Android Glide无法加载图像
我有简单的布局与ImageViewAndroid Glide无法加载图像,android,android-glide,Android,Android Glide,我有简单的布局与ImageView <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_wid
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.vbusovikov.glidetest.MainActivity">
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
/>
</RelativeLayout>
但是,会显示错误图标。
这可能是什么样的问题?
我的网络上有代理服务器,并且有适合这种情况的gradle.properties
systemProp.http.proxyHost=proxy******.ru
systemProp.http.proxyPort=****
但是,即使我尝试在任何代理之外启动这个小应用程序,出于某种原因它也不会工作
我的build.gradle文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.example.vbusovikov.glidetest"
minSdkVersion 15
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:25.1.1'
compile 'com.github.bumptech.glide:glide:3.7.0'
testCompile 'junit:junit:4.12'
}
UPD。这个简单的应用程序可以从internet加载图片,但不能从我的服务器加载图片。我的服务器的一些图片正在加载,但其他图片没有加载。我已经迷路了。它在我这边工作得很好。.检查网络,不要忘记在清单中添加internet权限。尝试添加占位符标记(看起来很奇怪,但这解决了我这边的问题)
不幸的是,所有的答案都是对的,但在我的条件下不起作用。服务器设置不适合从中下载图片 ==更新== 我发现服务器上的图片坏了。通过在Mozilla Firefox中打开此url,您可以检查所提供url上的图片是否有效。 图片中最后几千字节可能会被删除,但谷歌Chrome等浏览器会忽略这一点,并正常显示图像。然而,Firefox更为敏感,因此它有助于定位问题 ==更新2==
过了一段时间,我发现不仅仅是损坏的图片会导致问题。尝试在应用程序的清单中添加
android:usesCleartextTraffic=“true”
。它将解决图片加载的一些问题。在图像url中使用https而不是http。图片可能太大而无法加载,这可能引发异常:“位图太大而无法上载到纹理”。在这种情况下,应先缩放图像,然后再将其设置为“查看”(请参阅)
复制自user1352407的答案:
ImageView iv = (ImageView)waypointListView.findViewById(R.id.waypoint_picker_photo);
Bitmap d = new BitmapDrawable(ctx.getResources() , w.photo.getAbsolutePath()).getBitmap();
int nh = (int) ( d.getHeight() * (512.0 / d.getWidth()) );
Bitmap scaled = Bitmap.createScaledBitmap(d, 512, nh, true);
iv.setImageBitmap(scaled);
在我的例子中,我使用了一个侦听器,在onResourceReady中,我返回了
true
,但您应该返回false
Glide.with(context)
.load(url)
.centerCrop()
.diskCacheStrategy(DiskCacheStrategy.RESOURCE).listener(object :
RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean,
): Boolean {
imageView.visibility = GONE
errorContainer.visibility = VISIBLE
return true
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean,
): Boolean {
imageView.visibility = VISIBLE
errorContainer.visibility = GONE
return false // <<<<<<<<<<<<<<<<<<<<<<<< here
}
}).into(imageView)
Glide.with(上下文)
.load(url)
.centerCrop()
.diskCacheStrategy(diskCacheStrategy.RESOURCE).listener(对象:
请求侦听器{
覆盖加载失败(
e:例外情况?,
型号:有吗?,
目标:目标?,
isFirstResource:Boolean,
):布尔值{
imageView.visibility=消失
errorContainer.visibility=可见
返回真值
}
覆盖资源就绪(
资源:可提取?,
型号:有吗?,
目标:目标?,
数据源:数据源?,
isFirstResource:Boolean,
):布尔值{
imageView.visibility=可见
errorContainer.visibility=消失
return false//尝试在任何代理之外启动这个小应用程序,由于某种原因它不会工作
,尝试更改图像。它是否工作?Glide.with(yourclass.this)
是否在清单中添加了Internet权限?@IntelliJAmiya我还尝试添加了dontAnimate()
但它不起作用我有这个权限你能在这里粘贴你的构建gradle和logcat吗?:)不适合我,我也尝试了dontAnimate()
,它不起作用。我面临同样的问题。图像在浏览器上正常显示,但Glide库中出现错误。我尝试了许多解决方案,但问题没有解决。我的问题在使用您的解决方案时已得到解决,thanksUpdate 2正在为我工作,但对API 22(我的min版本)发出警告.还有其他想法吗?这么简单,这真的节省了我的时间和精力。谢谢@Hiren
ImageView iv = (ImageView)waypointListView.findViewById(R.id.waypoint_picker_photo);
Bitmap d = new BitmapDrawable(ctx.getResources() , w.photo.getAbsolutePath()).getBitmap();
int nh = (int) ( d.getHeight() * (512.0 / d.getWidth()) );
Bitmap scaled = Bitmap.createScaledBitmap(d, 512, nh, true);
iv.setImageBitmap(scaled);
Glide.with(context)
.load(url)
.centerCrop()
.diskCacheStrategy(DiskCacheStrategy.RESOURCE).listener(object :
RequestListener<Drawable> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<Drawable>?,
isFirstResource: Boolean,
): Boolean {
imageView.visibility = GONE
errorContainer.visibility = VISIBLE
return true
}
override fun onResourceReady(
resource: Drawable?,
model: Any?,
target: Target<Drawable>?,
dataSource: DataSource?,
isFirstResource: Boolean,
): Boolean {
imageView.visibility = VISIBLE
errorContainer.visibility = GONE
return false // <<<<<<<<<<<<<<<<<<<<<<<< here
}
}).into(imageView)