【发布时间】:2018-02-05 14:36:39
【问题描述】:
我从我的服务中获取数据:
JSONObject userGuid = new JSONObject();
userGuid.put("userGuid", id);
Bitmap bitmap = null;
String response = HttpUtil.post(mService + "GetUser", userGuid.toString(), mCookie);
JSONObject result = new JSONObject(response).getJSONObject("User");
String temp = result.getJSONArray("UserImage").toString();
在接收到的数据中,有一个 Base64 图像用户,我得到它并将其转换为 arryByte 然后我将其转换为 InputStream :
byte[] tmp = Base64.decode(temp, Base64.DEFAULT);
InputStream is = new ByteArrayInputStream(tmp);
我想通过 outputStream 将其写入 File :
OutputStream os = new FileOutputStream(f);
但我收到了这个错误:
java.io.FileNotFoundException: /storage/emulated/0/fcImages/581864034: open failed: EACCES (Permission denied)
在清单中我添加了这些权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET"/>
你的想法是什么?
编辑 我以这种方式创建文件:
public class FileCache {
private File cacheDir;
public FileCache(Context context) {
if((Environment
.getExternalStorageState()).equals(Environment.MEDIA_MOUNTED)) {
cacheDir = new File(Environment.getExternalStorageDirectory(), "fcImages");
} else {
cacheDir = context.getCacheDir();
}
if(!cacheDir.mkdirs()) {
cacheDir.mkdirs();
}
}
public File getFile(String id) {
String filename = String.valueOf(id.hashCode());
File f = new File(cacheDir, filename);
return f;
}
【问题讨论】:
-
你测试的witch Android OS版本??
-
我正在使用 api 23
-
可能你需要阅读这篇文章。在尝试“使用”它之前,您必须在您的代码中获得许可:)。 developer.android.com/training/permissions/requesting.html
-
同样的代码在这个 api 中是正确的,但唯一不同的是我使用 uri 获取图像然后编写它的另一个项目:
URL imageUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) imageUrl.openConnection(); conn.setConnectTimeout(30000); conn.setReadTimeout(30000); conn.setInstanceFollowRedirects(true); InputStream is = conn.getInputStream(); OutputStream os = new FileOutputStream(f); -
只需在您的设备设置中检查您的应用程序的权限。 Android api 23 和最新版本会忽略您的清单权限。现在它需要用户交互来允许它。检查这个link
标签: android file-permissions fileoutputstream