你的问题是这么产生的:
1.第一次调用函数,因为在本地不存在,所以去网络下载。
2.因为你在UI线程中访问网络,所以导致异常,并在本地生成一个长度为0的空文件。
3.第二次调用函数,因为本地文件存在,所以执行的是else分支
4.因为文件内容为空,所以Drawable.createFromPath返回null解决方法:
1.不要在UI线程中下载文件。
2.下载文件发生异常时删除残留文件。

解决方案 »

  1.   

    可问题是我并没有在UI线程里下载啊,logcat里也没有报exception,我是在线程池里调用上面的方法的。如下: executor = new ThreadPoolExecutor(1, 50, 180, TimeUnit.SECONDS, queue);// 用线程池来做下载图片的任务
    executor.execute(new Runnable() {
    @Override
    public void run() {
    Drawable drawable = loadImageFromUrl(context, imageUrl);
    imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
    Message message = handler.obtainMessage(0, drawable);
    handler.sendMessage(message);
    }
    });
      

  2.   

    那可能是下载失败导致本地文件内容不完整导致的。你可以检查一下/data/data/com.roy.activity/cache/test01_upload_1.jpg
    这个文件。
      

  3.   

    那可能是下载失败导致本地文件内容不完整导致的。你可以检查一下/data/data/com.roy.activity/cache/test01_upload_1.jpg
    这个文件。下载失败的原因是什么?我该怎么做才能让图片正确显示呢?
      

  4.   

    那可能是下载失败导致本地文件内容不完整导致的。你可以检查一下/data/data/com.roy.activity/cache/test01_upload_1.jpg
    这个文件。下载失败的原因是什么?我该怎么做才能让图片正确显示呢?
    你是不是检查了本地的/data/data/com.roy.activity/cache/test01_upload_1.jpg文件有问题?
    因为网络原因下载中断或失败是很常见的事情,具体的原因要看异常里的信息。