Glide无法加载图片

时间:2017-02-07 06:03:39

标签: 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_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>

简单的Glide表达式将图像加载到此ImageView只是为了测试Glide

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView imageView = (ImageView)findViewById(R.id.image);

        Glide.with(this)
                .load("http://you-ps.ru/uploads/posts/2013-08/1376601606_1273.png")
                .error(R.mipmap.ic_launcher)
                .into(imageView);

    }

但是,会显示错误图标。 可能是什么问题? 我的网络上有代理服务器,并且适用于该情况的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加载图片,但它无法从我的服务器加载图片。我的服务器的一些图片正在加载正常,但其他图片没有。我已经失去了这个

7 个答案:

答案 0 :(得分:0)

它在我身边工作得很好..检查网络并且不要忘记在清单中添加互联网权限。:)

答案 1 :(得分:0)

尝试添加占位符标签(看起来很奇怪,但这使我固定在我身边)

Glide.with(YourActivity.this)
                .load("http://you-ps.ru/uploads/posts/2013-08/1376601606_1273.png")
                .error(R.mipmap.ic_launcher)
                .placeholder(R.mipmap.placeholder)
                .into(imageView);

答案 2 :(得分:0)

不幸的是,所有答案都是正确的,但不符合我的条件。服务器设置不适合从中下载图片。

== UPDATE ==

在我发现之后,我服务器上的图片被打破了。您可以通过在Mozilla Firefox中打开此网址来检查您提供的网址上的图片是否有效。 图片中的最后几千字节可能会被删除,但谷歌浏览器等浏览器会忽略它并正常显示图像。但是,Firefox更敏感,因此有助于本地化问题。

答案 3 :(得分:0)

在图像网址中使用HTTP插入的https。

答案 4 :(得分:0)

图片可能太大而无法加载,这可能会引发异常:“位图太大而无法上传到纹理中”。在这种情况下,应先缩放图像,然后再将其设置为“查看”(请参见user1352407's answer

从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);

答案 5 :(得分:0)

就我而言,我使用的是侦听器,而在 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)

答案 6 :(得分:0)

我可能来不及回答它,但如果有人仍然面临这个问题。 所以我遇到了类似的问题,我无法使用 Glide 加载图像,经过大量研究,我发现问题不是来自 glide,而是来自图像 URL。 所以为了解决这个问题,我尝试使用自定义用户代理,它对我有用。

GlideUrl url = new GlideUrl(imgUrl, new LazyHeaders.Builder()
                    .addHeader("User-Agent", WebSettings.getDefaultUserAgent(mContext))
                    .build());

并使用此 Url 加载图像:

Glide.with(mContext).load(url).into(imageview);