Intereting Posts
Создание формы треугольника с использованием определений xml? Как уменьшить внутреннюю прописку вокруг текста в объекте кнопки Android? Пример утечки памяти для Android из Google I / O Как автоматически определить необходимость iScroll? Прокрутка ListView изменяет все: от белого до черного Не удалось добавить окно android.view.ViewRoot$W@44da9bc0 – разрешение отклонено для этого типа окна Как фильтровать RecyclerView с помощью SearchView Как создать дизайн материала, например, обычную полосу прокрутки с цифрами и буквенными буквами в recylerview Recyclerview Изменение элементов во время прокрутки Получение UnknownLengthHttpInputStream при получении InputStream из HttpURLConnection в android Разница между setRepeating и setInexactRepeating AlarmManager RecyclerView – прокрутка до позиции не работает каждый раз Android: SeekBar с настраиваемым выводом Как переместить в приложение Live Wallpaper из приложения? Как я могу открыть закрытый InputStream, когда мне нужно его использовать 2 раза

GetExternalFilesDir (null) возвращает null

Еще раз, я столкнулся с вопросом, который был задан и ответил раньше, но в моей реализации он все еще не работает.

Я вызываю getExternalFilesDir (null) в самом начале метода onCreate моей основной деятельности. Он возвращает null каждый раз, независимо от того, запускаю ли я его в AVD или на моем телефоне (Samsung Galaxy Plus).

Да, я <uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" /> строку <uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" /> в моем AndroidManifest.xml и да, я проверяю состояние внешней памяти перед тем, как сделать звонок, и он установлен.

Вот первые три строки внутри моего метода onCreate () . На самом деле, это происходит только после вызовов super.onCreate () и setContentView () .

 String state = Environment.getExternalStorageState(); File extFiles = getExternalFilesDir(null); File locFiles = getFilesDir(); 

Итак, как только эти три строки выполнены, это значения для переменных:

 state == "mounted" extFiles == null locFiles == "/data/data/com.mypackage.name/files" 

У кого-нибудь есть идеи, почему это может быть?

—–РЕДАКТИРОВАТЬ—–

Поэтому я попробовал другой подход; Вместо использования getExternalFilesDir(null) я попытался использовать File basePath = new File(Environment.getExternalStorageDirectory(), "myAppName");

Это не идеально, и я знаю, что в документации на Android сказано, и я согласен с этим, что лучше использовать getExternalFilesDir() . Увидев, что это не работает для меня, хотя мне пришлось попробовать что-то еще. На этот раз функция возвращает верный объект File, поэтому после указанной выше строки basePath будет / mnt / sdcard / myAppName . Все идет нормально. Когда я проверяю с помощью DDMS, я вижу, что / mnt / sdcard существует, но не / mnt / sdcard / myAppName . Этого следует ожидать. Поэтому я вызываю boolean result = basePath.mkdirs();

Но это возвращает false, и когда я проверяю файловую систему, я могу подтвердить, что подпапка myAppName не была создана. Когда я создаю папку вручную через DDMS и помещаю в нее файлы, я могу прочитать эти файлы из своего приложения, но я не могу ничего писать в этой папке.

Пожалуйста помоги! Я в конце своего ума.

Solutions Collecting From Web of "GetExternalFilesDir (null) возвращает null"

Если это не опечатка, когда вы разместили свой вопрос, вы, вероятно, будете ненавидеть себя за это:

<uses-permission android:name="android.permissions.WRITE_EXTERNAL_STORAGE" />

должно быть

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Это из документации Android:

Возвращает путь к каталогу, хранящему файлы приложений на внешнем хранилище. Возвращает значение null, если внешнее хранилище в настоящий момент не установлено, поэтому он не может гарантировать, что путь существует; Вам нужно будет снова вызвать этот метод, когда он будет доступен.

Другой вариант – вы можете проверить, доступно ли внешнее хранилище:

 String state = Environment.getExternalStorageState(); File filesDir; // Make sure it's available if (Environment.MEDIA_MOUNTED.equals(state)) { // We can read and write the media filesDir = getExternalFilesDir(null); } else { // Load another directory, probably local memory filesDir = getFilesDir(); } 

Удалить строку
Use-permission android: name = "android.permission.WRITE_EXTERNAL_STORAGE"
В «AndroidManifest.xml».

Переключите редактор xml в «Разрешения манифеста Android» на вкладке «Разрешения» в eclipse и добавьте несколько разрешений «android.permission.WRITE_EXTERNAL_STORAGE».

Затем попробуйте запустить приложение.


Кажется, затмение (может зависеть от степени версии или состояния или настроек) может игнорировать некоторые слова, описанные прямым xml в «AndroidManifest.xml».


Спасибо за совет. Вы правы, мой ответ, похоже, согласился в разговоре.