问题

本来想写个Demo用下glide,虽说之前用过,但是只是简单地使用,并没有深入研究。但是,却遇到问题:
新建好项目之后,在布局中加了ImageView.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context="com.kite.imageloader.MainActivity">

    <ImageView
        android:id="@+id/image"
        android:src="@mipmap/ic_launcher"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

然后,添加glide依赖:
最后,在MainActivity中写下如下代码,以便测试:

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.image);
        Toast.makeText(this, "kkk", Toast.LENGTH_SHORT).show();
        Glide.with(this).load("http://7xi8d6.com1.z0.glb.clouddn.com/16124047_121657248344062_4191645221970247680_n.jpg")
                .into(imageView);
    }

这样做完之后,图片怎么也显示不出来,我之前想是不是依赖没添加对,ImageView的id是不是没有正确引用等等,但是没有结果

分析

想着如此能看到报错信息就好了,可是查看log,也没有我想要的信息。
后来发现Glide为我们提供了listener()方法。于是我就加上了它。

package com.kite.imageloader;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.image);
        Toast.makeText(this, "kkk", Toast.LENGTH_SHORT).show();
                Glide.with(this).load("http://7xi8d6.com1.z0.glb.clouddn.com/16124047_121657248344062_4191645221970247680_n.jpg")
                .listener(mRequestListener)
                .into(imageView);

   RequestListener mRequestListener = new RequestListener() {
        @Override
        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) {
            Log.d(TAG, "onException: " + e.toString()+"  model:"+model+" isFirstResource: "+isFirstResource);
            imageView.setImageResource(R.mipmap.ic_launcher);
            return false;
        }

        @Override
        public boolean onResourceReady(Object resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) {
            Log.e(TAG,  "model:"+model+" isFirstResource: "+isFirstResource);
            return false;
        }
    };
}

打印出log如下:

D/MainActivity: onException: java.lang.SecurityException: Permission denied (missing INTERNET permission?)  model:http://7xi8d6.com1.z0.glb.clouddn.com/16124047_121657248344062_4191645221970247680_n.jpg isFirstResource: true

原来:Permission denied (missing INTERNET permission?)

于是我在AndroidManifest加上
<uses-permission android:name="android.permission.INTERNET"/>
于是成功了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐