运行应用后图片加载不出来?

运行应用后图片加载不出来?

GifDownload:

public class GifDownload extends Thread {
    private static final String TAG = "GifDownload";
    private String mUrl;
    private DownloadListener mListener;

    public GifDownload(String url,DownloadListener listener) {
        mUrl = url;
        mListener = listener;
    }

    @Override
    public void run() {
        super.run();
        File file = new File("/data/data/com.demo.gif/cache/", "test.gif");
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }

        if (file.exists()) {
            file.delete();
        }

        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(mUrl);
            HttpResponse httpResponse = httpClient.execute(httpGet);
            if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                FileOutputStream fileOutputStream = new FileOutputStream(file);
                InputStream inputStream = httpResponse.getEntity().getContent();
                byte[] buf = new byte[1024 * 8];
                int len = 0;
                while ((len = inputStream.read(buf)) != -1) {
                    fileOutputStream.write(buf, 0, len);
                }
                fileOutputStream.flush();
                fileOutputStream.close();
                inputStream.close();
            }
            httpClient.getConnectionManager().shutdown();
        } catch (Exception e) {
            Log.e(TAG, "run: ", e);
        }
        mListener.onFinish(file);
    }

    public static interface DownloadListener {
        void onFinish(File file);
    }
}

GifView:

public class GifView extends View {
    private int mResId;
    private Movie mMovie;
    private long mStartTime;

    public GifView(Context context) {
        super(context);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        }
    }

    public void setMovieResource(int resId) {
        mResId = resId;
        mMovie = Movie.decodeStream(getResources().openRawResource(resId));
    }

    //为当前的view设置宽高
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (mMovie != null) {
            setMeasuredDimension(mMovie.width(), mMovie.height());
        } else {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (mMovie != null) {
            long now = SystemClock.uptimeMillis();
            if (mStartTime == 0) {
                mStartTime = now;
            }

            //动画持续的时间
            int dur = mMovie.duration();
            if (dur == 0) {
                dur = 1000;
            }

            int timeInterval = (int) ((now - mStartTime) % dur);
            mMovie.setTime(timeInterval);

            mMovie.draw(canvas, 0, 0);
            invalidate();
        }
    }

    public void setFile(File file) {
        mMovie = Movie.decodeFile(file.getAbsolutePath());
    }
}

MainActivity代码:

public class MainActivity extends AppCompatActivity {

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

        final GifView gifView = new GifView(this);
        ((ViewGroup) findViewById(R.id.layout_holder)).addView(gifView);
        //gifView.setMovieResource(R.raw.demo);

        new GifDownload("http://ww2.sinaimg.cn/mw690/005zXVmagw1f385elswm8g30fk06enpg.gif", new GifDownload.DownloadListener() {
            @Override
            public void onFinish(File file) {
                if (file.exists()) {
                    gifView.setFile(file);
                }
            }
        }).start();
    }
}

我在gifView.setFile(file)处打了断点,也看到下载的文件了,就是显示不出来。

http://img1.sycdn.imooc.com//climg/5b6c1793000131f012770555.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
irista23 2018-08-10 10:27:26

 javax.net.ssl.SSLException这个错误是网站采用了ca认证,所以不能像http那样直接访问,要想解决访问https的问题参考如下课程中关于https部分

http://img1.sycdn.imooc.com//climg/5b6cf7c50001d11612120411.jpg

irista23 2018-08-10 09:44:00

你断点跟踪一下看看有没有掉到catch里

http://img1.sycdn.imooc.com//climg/5b6cedcf000176e506230457.jpg

  • 提问者 lovewhoilove #1
    我用视频中提供的网址调试了一下,掉到catch里面的,e打印出来是: javax.net.ssl.SSLException: hostname in certificate didn't match: <cdn.duitang.com> != <img.ucdl.pp.uc.cn> OR <img.ucdl.pp.uc.cn> OR <dl.lianwifi.com> OR <cdn.osupdateservice.yunos.com> OR <dl.51y5.net> OR <oss.ucdl.pp.uc.cn> OR <alissl.ucdl.pp.uc.cn> OR <iscsi.ucdl.pp.uc.cn> OR <slient.ucdl.pp.uc.cn>
    2018-08-10 10:17:19
提问者 lovewhoilove 2018-08-09 19:42:49

http://img1.sycdn.imooc.com//climg/5b6c286a0001838813150563.jpg

这个是用的视频中提供的url地址,关键是和源码对照过了呀,不是运不运行你的代码的问题,并且,现在都不用eclipse开发了

好帮手慕雪 2018-08-09 19:34:37

那你运行老师的代码呢,能显示吗?确定不是版本问题,然后不行你换个网址试一下https://cdn.duitang.com/uploads/item/201411/16/20141116232126_yXFLS.gif。

  • 提问者 lovewhoilove #1
    刚开始就是用的这个网址,会报错。我贴一下图,等会
    2018-08-09 19:41:05
  • 提问者 lovewhoilove #2
    我在问题下面贴上你提供的地址后报的错误
    2018-08-09 19:43:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android数据通信开发与应用2018版
  • 参与学习           人
  • 提交作业       147    份
  • 解答问题       687    个

本专题介绍了Android开发核心组件:广播、服务及全局应用。教会你如何使用AIDL、Thread、Socket、蓝牙解决进程线程间通信问题。利用Glide等实现异步加载及NDK原生代码开发。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师