1

頭を壁にぶつけます。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;
    }
}
4

1 に答える 1