2011-03-23 2 views
0

UPDATE: После небольшого тестирования я определил, что сам файл не создается, по крайней мере, в соответствии с файлом. Есть идеи?Сериализация ArrayList android не работает

Привет Я пытаюсь сериализовать arraylist, когда мое приложение выходит и читает его обратно, когда оно возобновляется. Кажется, он не создает файл.

Вот мой код.

protected void onPause() { 
    super.onPause(); 

    if(!myArrayList.isEmpty()) 
    { 
     final String FILENAME = "myfile.bin"; 
     try{ 
      FileOutputStream fos; 

      fos = openFileOutput(FILENAME, Context.MODE_PRIVATE); 

      //FileOutputStream fileStream = new FileOutputStream(FILENAME); 
      ObjectOutputStream os = new ObjectOutputStream(fos); 
      os.writeObject(myArrayList); 
      os.flush(); 
      os.close(); 
     } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      }catch(IOException e){ 
       e.printStackTrace(); 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } 
    } 
} 

@SuppressWarnings("unchecked") 
    @Override 
    protected void onResume() { 
     super.onResume(); 

    File file = new File("myfile.bin"); 
    if(file.exists()){ 
     final String FILENAME="myfile.bin"; 
     try{ 
      FileInputStream fileStream = new FileInputStream(FILENAME); 
      ObjectInputStream os = new ObjectInputStream(fileStream); 
      myArrayList = (ArrayList<MyObject>)os.readObject(); 
      os.close(); 
     } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      }catch(IOException e){ 
       e.printStackTrace(); 
     } 
    } 




} 

Любые идеи? Класс MyObject реализует serializable.

+0

'' e.getMessage() '' в ваших инструкциях catch не делает абсолютно ничего, поэтому вы по существу молча игнорируете любые заброшенные исключения. Улучшение обработки ошибок поможет вам определить проблему. –

+0

@Chris Knight Добавлен еще один способ обработки filenotfound и ioexcpetion по-прежнему нет ошибок в logcat/журнале ошибок. –

+0

Можете ли вы обновить приведенный выше код с помощью новой обработки ошибок? –

ответ

0
os.writeObject(myArrayList); 
os.flush(); 
os.close(); 

Попробуйте os.close() сразу после writeObject, он должен вызвать flush() в любом случае.

+0

Это был мой оригинальный код, я добавил флеш, увидев его как предложение где-то в google. Все еще не сработало. –

+0

подтвердите, если MyObject находится в пути к классам, проверьте, работает ли простой ArrayList . – Naveen

+0

Класс находится в том же каталоге/каталоге основной программы, если это то, что вы имеете в виду? –

1

Удалите его, чтобы сработать, изменив FileInputStream fileStream = new FileInputStream(FILENAME) на FileInputStream fileStream= openFileInput(FILENAME).

+0

Рад видеть, что вы решили свою проблему! Не забудьте пометить свой ответ как принятый, нажав галочку слева. –

Смежные вопросы