アンドロイドの内部/外部メモリにあるファイルのデータディクショナリを読み書きしたい。WP7では、辞書を直接保存するためにIsolatedStorageを使用していました。IOSでは、NSDictionaryをファイルに直接書き込むことができます。DataDictionaryをファイルに書き込む方法を教えてください。
注:Map変数にキーと値があります。このマップをファイルに直接保存する方法
アンドロイドの内部/外部メモリにあるファイルのデータディクショナリを読み書きしたい。WP7では、辞書を直接保存するためにIsolatedStorageを使用していました。IOSでは、NSDictionaryをファイルに直接書き込むことができます。DataDictionaryをファイルに書き込む方法を教えてください。
注:Map変数にキーと値があります。このマップをファイルに直接保存する方法
次の理由であなたの言葉をデータベースに入れることをお勧めします
SQLiteを使用したAndroidでのDBルックアップは、最もせっかちなユーザーでも「十分に高速」(〜1ms)です。大きなファイルをメモリに読み込むことは、Androidなどのメモリが制限された環境では危険な方法です。
「メモリ内」ではなく「インプレース」でファイルからエントリを読み取ろ
うとすると、SQLite
がすでに解決しているすべての問題を効果的に解決しようとします。
分散アプリケーションの.apkにデータベースを埋め込む[Android]
オブジェクトのシリアル化を検索すると、より詳細な例を見つけることができます
[編集1]
Map map = new HashMap();
map.put("1",new Integer(1));
map.put("2",new Integer(2));
map.put("3",new Integer(3));
FileOutputStream fos = new FileOutputStream("map.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(map);
oos.close();
FileInputStream fis = new FileInputStream("map.ser");
ObjectInputStream ois = new ObjectInputStream(fis);
Map anotherMap = (Map) ois.readObject();
ois.close();
System.out.println(anotherMap);
[編集2]
try {
File file = new File(getFilesDir() + "/map.ser");
Map map = new HashMap();
map.put("1", new Integer(1));
map.put("2", new Integer(2));
map.put("3", new Integer(3));
Map anotherMap = null;
if (!file.exists()) {
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(map);
oos.close();
System.out.println("added");
} else {
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
anotherMap = (Map) ois.readObject();
ois.close();
System.out.println(anotherMap);
}
} catch (Exception e) {
}
[編集3]
Iterator myVeryOwnIterator = meMap.keySet().iterator();
while(myVeryOwnIterator.hasNext()) {
String key=(String)myVeryOwnIterator.next();
String value=(String)meMap.get(key);
// check for value
}
SharedPreferences
(link )を使用することがあなたのユースケースに適しているかどうかはわかりません。
キーと値のペアを介して保存し、SharedPreferences
アプリケーションごとに複数持つことができます。両方ともString
オブジェクトとして格納されますが、組み込みメソッドを使用して、値を他のプリミティブに自動的にキャストできます。
Mark Murphyは、パターン(link )を使用してアクセスしやすくするために、ライブラリcwac-loaderex
(link )を作成しました。これにより、IOをメインスレッドから遠ざけるために必要な作業の一部が相殺されます。SharedPreferences
Loader