Qualcuno sa come salvare e ripristinare un oggetto su un file su Android?android come salvare un oggetto in un file?
risposta
Vedi qui per un esempio di codice: android how to save a bitmap - buggy code
Dipende se si desidera salvare il file su un supporto interno o esterno. Per entrambi situazione ci sono grandi campioni in loco DEV Android: http://developer.android.com/guide/topics/data/data-storage.html - questo dovrebbe sicuramente aiutare
Aprire un file mediante openFileOutput() (http://developer.android.com/guide/topics/data/data-storage.html#filesInternal), di utilizzare un ObjectOutputStream (http://download.oracle.com/javase/1.4.2/docs/api/java/io/ObjectOutputStream.html) per scrivere l'oggetto in un file.
utilizzare i loro openFileInput Evil Twin() e ObjectInputStream() per invertire il processo.
Ecco un esempio collaudato di suggestione @ di yayay. Si noti che l'utilizzo di readObject()
restituisce un Object
, quindi sarà necessario eseguire il cast, anche se il compilatore si lamenterà che si tratta di un cast non controllato. Posso ancora eseguire il mio codice bene però. Puoi leggere ulteriori informazioni sul problema del casting here.
Basta fare in modo che la classe (nel mio caso, ListItemsModel
) è serializzabile, perché il writeObject()
sarà serializzare l'oggetto, e il readObject()
si deserializzare esso. Se non lo è (non ottieni persistenza e il logcat lancia un NotSerializableException
), assicurati che la tua classe implementa java.io.Serializable
e sei a posto. Nota, nessun metodo deve essere implementato in questa interfaccia. Se la tua classe non può implementare Serializable
e lavorare (ad esempio classi di librerie di terze parti), this link ti aiuta a serializzare il tuo oggetto.
private void readItems() {
FileInputStream fis = null;
try {
fis = openFileInput("groceries");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
ObjectInputStream ois = new ObjectInputStream(fis);
ArrayList<ListItemsModel> list = (ArrayList<ListItemsModel>) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
private void writeItems() {
FileOutputStream fos = null;
try {
fos = openFileOutput("groceries", Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(itemsList);
} catch (IOException e) {
e.printStackTrace();
}
}
Voglio salvarlo in interno. Sto guardando ObjectOutputStream adesso e sembra interessante ma non so perché, non posso ottenere "fos = openFileOutput (filename, Context.MODE_PRIVATE);" per funzionare, non accetta il mio parametro String filename ... cosa diavolo ???? – Fabien
Ive ha scoperto che è un problema di contesto. – Fabien