2015-03-30 4 views
0

Для моего проекта студии Android мне нужно сериализовать объект User. Идея состоит в том, чтобы сохранить и загрузить этот объект, поэтому, когда приложение закрывается (уничтожается), объекты и его атрибуты сохраняются и сохраняются в файле. Моя проблема в том, что я получаю ошибку при загрузке объекта. Он говорит, что нет такого файла или каталога с именем «save.bin», хотя я пытался его создать. Вот мой код:Java Serialization Object

public class SaveAndLoadManager{ 
     public void save(Object object){ 
      Log.d("Save", "saving object"); 
      try{ 
       File userInfo = new File("save.bin"); 
       FileOutputStream fileOutputStream = new FileOutputStream(userInfo); 
       ObjectOutputStream objectOutputStream = new ObjectOutputStream(fileOutputStream); 
       objectOutputStream.writeObject(object); 
       objectOutputStream.close(); 
       Log.d("Save", "object saved"); 
      }catch(FileNotFoundException e){ 
       Log.e("Save", e.getMessage()); 
      }catch(IOException e){ 
       Log.e("Save", e.getMessage()); 
      } 
     } 
     public Object load(){ 
      Log.d("Load", "loading object"); 
      Object object = null; 
      try{ 
       FileInputStream fileInputStream = new FileInputStream("save.bin"); 
       ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream); 
       object = objectInputStream.readObject(); 
       objectInputStream.close(); 
       Log.d("Load", "object loaded"); 
      }catch(FileNotFoundException e){ 
       Log.e("Load", e.getMessage()); 
      }catch(StreamCorruptedException e){ 
       Log.e("Load", e.getMessage()); 
      }catch(Exception e){ 
       Log.e("Load", e.getMessage()); 
      } 
      return object; 
     } 
    } 

Как правильно создать каталог?

+0

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

ответ

0

Предполагая, что User реализует Serialazible

File userInfo = new File("save.bin"); 

вы можете думать о строке выше, как файловый объект, называемый «save.bin», хранящегося в корневом каталоге, (/) на файловая система. Ваше местоположение не может быть записано в вашем приложении. У вашего приложения есть два места записи: один хранится под /data/data/yourapp, а другой - на /sdcard/Android/data/yourapp. Оба должны иметь доступ через публичный api. Например. Вы можете использовать пару openFileOutput/openFileInput для получения FileOutputStream/FileInputStream

FileOutputStream fileOutputStream = openFileOutput("save.bin", Context.MODE_PRIVATE) 
FileInputStream fileInputStream = openFileInput("save.bin"); 

Как отметил @androidLerner в своем комментарии, вы можете найти более подробную информацию here,

+1

В этой ссылке вы узнаете, как это сделать правильно: http://developer.android.com/training/basics/data-storage/files.html – gkee