Я пытаюсь сохранить некоторые данные из своего приложения в простом текстовом файле во внутренней частной области хранения (пользовательские настройки приложения). Я прочитал много вопросов здесь (StackOverflow) и безуспешно пробовал предложенные решения. Кажется, самое простое решение было бы предложено здесь:
http://developer.android.com/guide/topics/data/data-storage.html#filesInternal
но я не могу заставить это работать мой тестовый аппарат. Я также попытался создать файл, используя методы, доступные в java.io.File, с соответствующими методами. Я также пытался создать файл на SD-карте с тем же результатом, но безуспешно. Я пробовал многие решения, перечисленные в других ответах, точно следуя предложенному коду и инструкциям, и нашел тот же результат. Я начинаю чувствовать, что мне не хватает какого-то важного фрагмента кода или где-то установленного флага, я установил разрешение в файле манифеста:
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Чтобы было ясно, я пытаюсь писать во внутреннюю частную память устройства. Это небольшой файл, содержащий имя, номер телефона и пару флагов типа int. Какой бы метод я ни использовал, я либо обнаруживаю, что файл не создан (или изменяется, если я помещаю файл вручную на SDCard), либо получаю NullPointerException, когда пытаюсь сослаться на файл или местоположение файла:
private File fILE = new File("Mydata", main.FILENAME);
or
private File fILE = getDir("Mydata", 0);
Я запускаю код на HTC Hero, обновленном последней версией обновления от Sprint. Любая помощь будет БОЛЬШОЙ признательна, Спасибо заранее!
-Стив
Обновление (2/2/11): Используя EVO (API 8), я все еще получаю исключение NullPointerException. Код, генерирующий исключение, приведен ниже. Любые мысли о том, почему мое приложение не может получить доступ к внутреннему хранилищу? У меня есть эта проблема на трех разных физических устройствах, использующих два уровня API (API 7 и 8).
File newfile = new File(this.getFilesDir() + "/data/files/", "sample.txt");
ОБНОВЛЕНИЕ 2: 04.02.11. Я обнаружил, что ни при каких обстоятельствах не вижу файловую структуру на физическом устройстве (каталог данных). У кого-нибудь есть мысли по этому поводу? Устройство правильно настроено и может запускать приложение из eclipse или adb.
ОБНОВЛЕНИЕ 3: (9.02.11) - Думаю, я нашел, в чем здесь проблема, но я не уверен, как с этим справиться. Я выяснил, что права доступа к каталогу /data/ на физических устройствах: drwxrwx--x. Я не уверен, почему это так, может быть, что-то со Sprint? Я нашел этот набор таким образом на HTC Hero, Samsung Epic (Galaxy S) и HTC EVO на Sprint. Проблема, по-видимому, в том, что DDMS и мое приложение не имеют доступа r/w к каталогу. Здесь мне нужно выяснить две вещи: почему это так и как решить эту проблему в дикой природе. Опять же, любая помощь здесь будет УДИВИТЕЛЬНОЙ!!
ОБНОВЛЕНИЕ 4: Я думаю, что февраль прошлого года был для меня моментом полной блондинки (см. ОБНОВЛЕНИЕ 3). Тестовые устройства, которые у меня есть, не имеют ROOT-прав и, следовательно, доступа к ним (DUH!). После всех обновлений, которые прошли он SGS и EVO 4G, результат все тот же. Я все еще работаю над этой проблемой и постараюсь вернуться сюда с обновлением в ближайшее время (надеюсь, в следующий раз меньше чем через год).
openFileOutput()и получаю исключение NullPointerException. Кажется, что каталог личных данных на телефоне почему-то заблокирован, я даже не могу посмотреть каталог; там вроде ничего не создается. Права доступа к каталогу data на телефоне: drwxrwx--x. Я начинаю задаваться вопросом, есть ли недопустимые настройки на телефоне или что-то в этом роде. Приложение требует, чтобы файл данных записывался во внутреннюю память для совместимости. - person Kingsolmn   schedule 27.01.2011rootоперационную систему. Чего я бы не предложил. У меня есть Google Dev Phone 2, и даже у него нет root-доступа. Можете ли вы опубликовать трассировку стека из Logcat? Нет смысла работать на эмуляторе, но ни на одном из ваших устройств. - person techiServices   schedule 18.02.2011