Файловое хранилище провайдера контента Нет Такой файл или каталог - PullRequest
0 голосов
/ 16 января 2011

Я создаю приложение, которое позволяет пользователю делать «графические» заметки.У меня возникла проблема при попытке сохранить растровое изображение в моем пользовательском ContentProvider (NotesProvider расширяет ContentProvider).Согласно Google devGuide должен переопределить метод openFile (Uri uri, String mode).И я получил ошибку: файл не найден.Я просматриваю эту проблему и получаю решение здесь .Затем я строю свое представление так:

    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

1 Ответ

0 голосов
/ 16 января 2011

У меня была похожая проблема с этим.В вашем эмуляторе, если папка, соответствующая Environment.getDataDirectory(), не существует, вы получите исключение.Сначала вам нужно вручную создать папку (не по коду) через терминал или adb.Как только вы это сделаете, попробуйте запустить ваш код снова, и он должен работать.

...