Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Glide无法加载图像_Android_Android Glide - Fatal编程技术网

Android Glide无法加载图像

Android 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

我有简单的布局与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_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)