作者gcobc12632 (Ted)
看板AndroidDev
标题[问题] 如何下载网路图片到内存
时间Wed Jan 13 17:37:04 2016
我是一名自学ANDROID的新手
我原本是用 DownloadManager 来下载网路图片
然後在储存在SD卡内:
DownloadManager download =
(DownloadManager)getSystemService(DOWNLOAD_SERVICE);
Request request = new Request(Uri.parse("图片网址"));
String filepath = Environment.getExternalStorageDirectory().getPath();
File file = new File(filepath, "图片名称");
Uri uri = Uri.parse("file://" + file);
request.setDestinationUri(uri);
download.enqueue(request);
结果後来我发现,并不是每只手机都有SD卡
如果是在没有SD卡的手机上执行就会无法下载图片,甚至闪退
最好的办法就是将图片存到内存里…
每支手机都会有内存的吧
我知道内存的路径是:getApplicationContext().getFilesDir().getPath()
但是我直接套用上面程式码的 filePath,却会闪退
java.lang.NullPointerException: Attempt to invoke virtual method
'java.lang.String java.io.File.getPath()' on a null object reference
因为完全没碰过这块所以毫无头绪…
那该如何改写呢?
或是有其他写法可供参考吗?
--
By ALi Project グランギニョル
仏语で「操り人形」または「人形剧」を指す。
普通は19世纪末のパリに実在した剧场「グラン・ギニョル座」を指す。
この剧场では人形の代わりに人间が出演し,残酷でエロチックな恐怖剧を演じた。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.231.189.199
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1452677830.A.08F.html
1F:推 lonelytea: getpath这东西是空的意思 01/13 21:13
2F:→ lonelytea: 他没抓到任何东西 所以会出错 01/13 21:14
我有写一个LOG 是显示 getApplicationContext().getFilesDir().getPath() 的路径
结果显示的路径是 data/data/MyPackageName/files
这就是APP的安装位置吧 那为什麽会没抓到东西呢?
3F:→ y3k: 你要去判断各种会拿回null或exception的状况 01/13 21:58
4F:推 kiwatami: 我记得没有SD卡他就会存在内部储存空间阿 01/14 08:44
我用一台没有SD卡的手机实测(内存2G,可用空间大约还有400MB)
filepath = Environment.getExternalStorageDirectory().getPath();
结果在下载图片的时候就卡住了…
5F:推 A4P8T6X9: Environment.getExternalStorageDirectory().getAbsolut 01/14 13:20
6F:→ A4P8T6X9: ePath() ? 01/14 13:20
7F:→ ssccg: DownloadManager只能存在external storage,API说明有写吧 01/14 13:38
8F:→ ssccg: 另外external storage ≠ SD卡 01/14 13:40
9F:→ ssccg: 最好的作法是如果没有external storage,就不要设 01/14 13:42
10F:→ ssccg: DownloadManager会存在cache,再用DownloadManager的的 01/14 13:43
11F:→ ssccg: getUriForDownloadedFile之类的方法取来用 01/14 13:44
我知道问题在哪了…
其实我原码是写:
String filepath = Environment.getExternalStorageDirectory() + "/imageFile";
有的手机会自动建立 imageFile 这个资料夹,就能正常的下载、把图片存进资料夹内。
但是有的手机侦测不到这资料夹,所以就不能下载了…(小米就是)
在下载之前就把资料夹建立起来,就可以下载图片了!
另外问一下,所有 Android 手机,都能用:
Environment.getExternalStorageDirectory() 这个路径吗?
我手边测了几只都正常,但还是怕会有例外…
※ 编辑: gcobc12632 (61.231.189.199), 01/14/2016 15:21:04
12F:推 changyuheng: 确实有可能有的装置缺少 external storage,因为什麽 01/15 10:36
13F:→ changyuheng: 事都有可能。不过那是 CTS 测项之一,我觉得不需要帮 01/15 10:36
14F:→ changyuheng: 没过 CTS 的装置设想。 01/15 10:36