我构建了允许用户制作“图形”笔记的应用程序。 当我尝试将Bitmap保存到我的自定义ContentProvider中时,我遇到了一个问题(NotesProvider扩展了ContentProvider)。根据谷歌devGuide应该覆盖openFile(Uri uri,String mode)方法。我得到错误:找不到文件。 我仔细研究了这个问题,得到了解决方案here。然后我像这样构建我的表示
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
if(sUriMatcher.match(uri)!=NOTE_ID)
throw new IllegalArgumentException("Unsupported open file on directori uri " +uri);
File root = new File(Environment.getDataDirectory(),
BITMAPS_PATH);
root.mkdirs();
File path=new File(root, uri.getEncodedPath());
int imode = 0;
if (mode.contains("w")) {
imode |= ParcelFileDescriptor.MODE_WRITE_ONLY;
if (!path.exists()) {
try {
path.createNewFile();
} catch (IOException e) {
// TODO decide what to do about it, whom to notify...
e.printStackTrace();
}
}
}
if (mode.contains("r")) imode |= ParcelFileDescriptor.MODE_READ_ONLY;
if (mode.contains("+")) imode |= ParcelFileDescriptor.MODE_APPEND;
return ParcelFileDescriptor.open(path, imode);
}
并且应用程序具有IOException
12:42:12.714 2550 WARN System.err java.io.IOException: No such file or directory
答案 0 :(得分:0)
我遇到了类似的问题。在您的模拟器中,如果与Environment.getDataDirectory()
对应的文件夹不存在,则会出现异常。您需要先通过终端或adb手动创建文件夹(而不是代码)。一旦你这样做,尝试再次运行你的代码,它应该工作。