Не чтение или запись во внутреннюю память Android - PullRequest
0 голосов
/ 15 июля 2011

Я пытаюсь сохранить карту во внутреннем хранилище Android.

Мой код:

    private void saveFavorite(){
    LinkedHashMap<String, LinkedList<MyCustomObject>> favorites = new LinkedHashMap<String, LinkedList<MyCustomObject>>();

    try{
        InputStream file = openFileInput(PATH);
        BufferedInputStream buffer = new BufferedInputStream( file );
        ObjectInput input = new ObjectInputStream ( buffer );
        try{
            Object o = input.readObject();
            if(o instanceof LinkedHashMap<?, ?>)
                favorites = (LinkedHashMap<String, LinkedList<MyCustomObject>>)o;
        }
        finally{
            input.close();
        }
    }
    catch(ClassNotFoundException ex){
    }
    catch(IOException ex){
    }

    String favoriteName = "asd";


    favorites.put(favoriteName, myobject);


    FileOutputStream fos;
    try {
        fos = openFileOutput(PATH, MODE_APPEND);
        BufferedOutputStream buffer = new BufferedOutputStream( fos );
        ObjectOutput output = new ObjectOutputStream( buffer );
        try{
            output.writeObject(favorites);
        }finally{
            output.close();
        }
    }catch(IOException ex){
    }
}

MyCustomObject реализует Serializable

Во время отладки я не вижулюбая проблема.Кажется, что он читает пустую карту, затем записывает карту со значением, но когда я снова ее читаю, карта пуста.

Помогите, пожалуйста.

ОБНОВЛЕНИЕ: Iнашел внутри / data / data / my_project_package_structure / files / файл, который называется как моя переменная PATH.Он увеличивается в размере каждый раз, когда я вызываю мой метод сохранения, поэтому я думаю, что он пишет хорошо, но я не знаю, что я делаю неправильно.

1 Ответ

0 голосов
/ 19 июля 2011
try {
    **fos = openFileOutput(PATH, MODE_APPEND);**
    BufferedOutputStream buffer = new BufferedOutputStream( fos );

Должно быть

    **fos = openFileOutput(PATH, MODE_PRIVATE);**
...