Метод Android FileOutputStream «игнорируется» - PullRequest
0 голосов
/ 11 июля 2011

Я использую три файла для хранения локальных данных, для моего приложения, два из которых проверяются при запуске приложения и обновляются удаленно (если доступна более новая версия или файлы еще не существуют).Третий - для пользовательских данных, которые могут периодически храниться во время работы приложения.

Все три используют один и тот же метод для сохранения файла:

    public boolean setLocalFile(String Filename, String FileText, Context con) {
    try {
        FileOutputStream fos = con.openFileOutput(Filename, Context.MODE_PRIVATE);
        fos.write(FileText.getBytes());
        fos.close();
        return true;
    } catch(Exception e) {
        handleError(e); // local method that simply does a System.out.println
        return false;
    }
}

Теперь третий файл пишет нормально,но первые два (которые проверяются и пишутся при запуске) вообще не пишут.При отладке создается впечатление, что метод setLocalFile полностью пропущен, не вызывая исключение и не вызывая сбой приложения, и отображаются только следующие сообщения об ошибках:

07-11 16:14:13.162: ERROR/AndroidRuntime(1882): ERROR: thread attach failed
07-11 16:14:18.882: ERROR/gralloc(62): [unregister] handle 0x3bfe40 still locked (state=40000001)

Я не нашел ничего полезного в Интернете, вК сожалению, это тоже относится к ним.

Это поставило меня в тупик - я понятия не имею, почему в данном конкретном случае не пишет.Есть идеи?

1 Ответ

0 голосов
/ 08 сентября 2011

Запоздалое обновление ... Предоставление кода, в котором возникла эта проблема, вероятно, было бы не слишком практичным, так как я подозреваю, что для полного его изучения практически потребуется весь мой код.

Мои имена переменных начинались с заглавных букв, в основном потому, что я только что вернулся к Java после примерно 10 лет работы с другими языками, поэтому мне потребовалось некоторое время, чтобы вернуться к тому, что происходит - не красиво, но я бы хотел быть удивленным, если бы это имело значение. Тем не менее, спасибо, ребята, за ответы.

Подоплекой проблемы было то, что я решил обработать данные, хранящиеся в этих файлах, как объекты класса. Таким образом, объект Drafts будет содержать все проекты документов, а конструктор класса вызовет метод getLocalFile и сохранит его локально в классе, что позволит мне работать с ним (используя различные методы типа get / set), прежде чем снова записать его в файл с методом 'commit' (вызывающим setLocalFile).

Были вызваны различные объекты такого класса, но не более одного экземпляра для каждого файла данных. Что меня озадачило, так это то, что все работало нормально, кроме операции FS, которую просто игнорировали. Как только я получил доступ к файлам напрямую (игнорируя написанные мной обертки классов), проблема исчезла.

Оболочки классов отлично работают в других частях приложения, и эта проблема возникала только в одном, сложном и довольно интенсивном разделе.

Как я уже сказал, я возвращаюсь в Java только после длительного отсутствия (и многое изменилось), но, глядя на проблему и то, как она "разрешилась" сама, я предполагаю, что это была какая-то форма потока / проблема с памятью - по сути, я получал доступ к ФС из-за слишком большого количества объектов, и в итоге решил, что больше не хочет играть.

Проблема, как я уже сказал, решена, но меня беспокоит то, что решение не позволило мне обернуть мои объекты данных более элегантно . Если кто-то может предложить причину / решение для этого, я с радостью опробую его и сообщу, в противном случае этот ответ может помочь кому-то с подобной проблемой в будущем - по крайней мере, найти неэлегического решение ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...