如何以编程方式在android中读/写数据字典

时间:2013-01-08 10:19:13

标签: android storage read-write data-dictionary

我想在android内部/外部存储器中的文件中读/写数据字典。在WP7中,他们使用IsolatedStorage直接存储字典。在IOS中,他们可以直接将NSDictionary写入文件。请有人告诉我将DataDictionary写入文件的方法。

  

注意:我在Map变量中有键和值。   如何将此Map直接存储到文件

2 个答案:

答案 0 :(得分:3)

我建议将您的文字放入数据库中,原因如下

  

使用SQLite在android上进行数据库查找“足够快”(〜1ms)即使是   最不耐烦的用户

     

将大文件读入内存是一种危险的做法   内存有限的环境,如android。

     

尝试从“文件”中读取文件,而不是“在文件中”   记忆“正在有效地试图解决SQLite的所有问题   已经为你解决了。

Embed a database in the .apk of a distributed application [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

}

答案 1 :(得分:0)

我不确定使用SharedPreferenceslink)是否适合您的用例。

您通过键值对进行存储,每个应用程序可以有多个SharedPreferences。虽然两者都存储为String个对象,但可以使用内置方法将值自动转换为其他基元。

Mark Murphy撰写了一个图书馆cwac-loaderexlink),以便通过SharedPreferences模式(link)使Loader访问{{1}} ,它抵消了你需要做的一些工作,以保持IO脱离主线程。