頭を壁にぶつけます。Blackberry から Android に移行中です。
ログを保持する必要があるアプリがあります。これは単純な ArrayList であり、それほど大きくはありません。アプリの再起動などの間も保持する必要がありますが、SQL を気にするほど複雑ではありません。ArrayList が最も簡単に見えるように、ListView に表示する必要があります。
ArrayList を簡単にシリアル化して保存できるようです。しかし、それを読み返すと、オブジェクトからArrayListにキャストできないと言って爆破します。
私の計画は、インスタンスを取得するときにログ オブジェクト (シングルトン) に履歴をロードさせることです。次に、onDestroy() を使用してファイルに書き込みます...
Blackberry では、このようなことは簡単でした。Android でこれほど多くの作業を行う必要があることに驚きました。Android の他のすべては簡単なようです。オブジェクトに Persistent のフラグを立てて、システムに管理させる方法を希望します。オブジェクトを SharedPreference に簡単に詰め込むこともできないことはわかっています。
誰かが私が間違っているところを指摘できますか? いくつかの方法で再配線しましたが、問題は残ります。もっと簡単な方法があれば教えてください。
ありがとう
私は持っている:
public class DataLog implements Serializable {
private static final long serialVersionUID = 0L;
private static String fileName = "datalog.dat";
private static ArrayList<String> log = null;
static public ArrayList<String> getInstance() {
if (log == null) {
synchronized (DataLog.class) {
if (log == null) {
log = new ArrayList<String>();
}
}
load();
}
return log;
}
public DataLog() {
super();
}
public boolean add(String entry) {
return log.add(entry);
}
public void add(int index, String entry) {
if (index > 0)
log.add(index, entry);
else
log.add(entry);
save();
}
public void clear() {
log.clear();
}
public void save() {
Persister.store(fileName, log);
}
public static void load() {
log = (ArrayList<String>) Persister.restore(fileName);
}
}
と
public class Persister {
static Context context = ThisApplication.context;
public Persister() {}
public static boolean store(String fileName, Object obj){
File file = context.getFileStreamPath(fileName);
FileOutputStream fos = null;
ObjectOutputStream oos = null;
try {
fos = new FileOutputStream(file);
oos = new ObjectOutputStream(fos);
oos.writeObject(obj);
oos.close();
fos.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return true;
}
public static Object restore(String fileName){
File file = context.getFileStreamPath(fileName);
Object obj = new Object();
if(file.exists() && file.length()>0){
FileInputStream fis = null;
ObjectInputStream ois = null;
try {
fis = new FileInputStream(file);
ois = new ObjectInputStream(fis);
obj = ois.readObject();
ois.close();
fis.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
}
return obj;
}
}