2013-12-21 4 views
2

При первом запуске приложения я создаю файл, используя context.getFilesDir(), чтобы получить путь к хранилищу. Это прекрасно работает, за исключением очень небольшого числа случаев этот метод возвращает корневую папку «/». В результате приложение падает с:Android context.getFilesDir() иногда возвращает корневую папку

java.io.FileNotFoundException:/my_filename (только для чтения файловой системы)

Когда я отладки на устройстве путь файла:

/data/data/my.package/files/my_filename

Этот код называется в OnCreate о наличии SherlockActivity. Таким образом, контекст - это действие. Как ни странно, неудача встречается редко, и нет никаких общности среди устройств, в которых она не работает.

Update: На основе обратной связи до сих пор, этот код должен работать и случайные сбои могут произойти из-за нечетные устройства. Попытка обойти эту проблему является излишним для моего случая использования, когда хранение файлов на самом деле не является обязательным. Я попытаюсь перенести свой код, чтобы использовать SharedPreferences.

+1

Честно говоря, это звучит как сломанные устройства - возможно, ошибочные пользовательские установки rom ?. Это не вызов, который имеет какие-либо задокументированные режимы отказа. –

+0

Возможно. Хотя процент отказов мал, с точки зрения абсолютных чисел, на которые стоит обратить внимание. Я не могу запретить этим пользователям загружать и оценивать приложение! –

+1

Вы можете обнаружить это и выставить что-то, сказав «обнаруженный дефектный телефон», или использовать место резервного копирования в этом случае. –

ответ

1

использование

Environment.getExternalStorageDirectory().getAbsolutePath(); 

получить внешний каталог хранения.

использование

Environment.getCacheDir(); 

для использования песочницы каталога кэша приложения.

+0

Да, но эти места возврата, предназначенные для * разных целей *, чем расположение, которое API, используемый в этом вопросе, документируется для обеспечения. Они могут быть или не быть жизнеспособными заменителями. И они могут быть или не быть более надежными, чем API, используемый в вопросе. –

+0

Этот способ всегда работал для меня без сучка и задоринки! поэтому я предложил их: D –

+0

Я не вижу метод Environment.getCacheDir() в документации. Я просто сохраняю некоторые настройки. Я не хочу мешать другим файлам пользователя. –

4

На всех предустановленных Android-устройствах обнаружена ошибка, которая встречается редко. Причиной ошибки является гоночное состояние при создании личного каталога приложения при первом запуске.

Предлагаемое решение (от участника команды Google Android) заключается в том, чтобы снова попробовать метод Context.getFilesDir() после первого отказа с возвратным значением «null».

Смежные вопросы