2015-10-10 3 views
0

мой mainActivity имеет ListView, который должен отображать мою CustomList:Как сериализовать и десериализовать в android?

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.io.Serializable; 
import java.util.ArrayList; 

public class CustomList implements Serializable { 
    private static final long serialVersionUID = 1L; 
    private ArrayList<Game> list = new ArrayList<Game>(); 
    public void add(Game toAdd){ 
     list.add(toAdd); 
    } 
    public Game get(int id){ 
     return list.get(id); 
    } 
    public ArrayList<Game> getList(){ 
     return list; 
    } 
    public void serialize(){ 
     try { 
      FileOutputStream fo = new FileOutputStream("res\\data.dat"); 
      ObjectOutputStream ou = new ObjectOutputStream(fo); 
      ou.writeObject(list); 
      ou.close(); 
      fo.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    public void deserialize(){ 
     try { 
      FileInputStream fi = new FileInputStream("res\\data.dat"); 
      ObjectInputStream oi = new ObjectInputStream(fi); 
      list = (ArrayList<Game>)oi.readObject(); 
      oi.close(); 
      fi.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

я получаю следующее сообщение об ошибке пытается сериализовать или desirialize:

java.io.FileNotFoundException: res\data.dat: open failed: ENOENT (No such file or directory) 

Мой вопрос заключается в том, как собственно точка моей data.dat файл. Заранее благодарен

ответ

1

Вы не можете записать в каталог res (это только для чтения), вам нужно записать в другое место, например. в каталог кеша (если он только временный, используйте context.getCacheDir(), чтобы получить его местоположение) или в какое-то постоянное пространство (например, context.getFilesDir()).

Вы можете получить местоположение файла, как это, что вы можете передать конструктору FileOutputStream в или FileInputStream в:

File file = new File(context.getFilesDir(), "data.dat"); 

Вы можете также запросить разрешение на запись на внешнее запоминающее устройство, если вы выбираете так.

Подробнее о хранении файлов в Android здесь: http://developer.android.com/training/basics/data-storage/files.html

+0

Что такое "контекст"? – Lealo

+0

https://stackoverflow.com/q/3572463/1193549 – hunyadym