как читать/записывать словарь данных в Android программно

Я хочу читать/записывать словарь данных в файл, который находится во внутренней/внешней памяти Android. В WP7 они использовали IsolatedStorage для непосредственного хранения словаря. В IOS они могут записывать NSDictionary прямо в файл. Пожалуйста, скажите мне, как записать DataDictionary в файл.

Примечание. У меня есть ключи и значения в переменной Map. как сохранить эту карту непосредственно в файл


person Ponmalar    schedule 08.01.2013    source источник


Ответы (2)


Я бы предложил внести ваши слова в базу данных по следующим причинам

Поиск в БД на Android с помощью SQLite выполняется "достаточно быстро" (~1 мс) даже
для самых нетерпеливых пользователей.

Чтение больших файлов в память является опасной практикой в ​​средах с ограниченной памятью, таких как 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

}
person Talha    schedule 08.01.2013
comment
Но если вы храните значения ключей в файле, это стоит слишком дорого. Я имею в виду, когда вы пытаетесь найти слово, как вы можете это сделать? - person Talha; 08.01.2013
comment
при хранении я добавляю ключ и значения с некоторыми значениями, поэтому я могу разделить это - person Ponmalar; 08.01.2013
comment
я не хочу использовать здесь хранилище SQLite. любой другой вариант? - person Ponmalar; 08.01.2013
comment
Спасибо. map.ser где это будет храниться? что такое .сер? - person Ponmalar; 08.01.2013
comment
.ser не имеет значения, просто самое короткое слово сериализации. Пожалуйста, посмотрите на редактирование 2 - person Talha; 08.01.2013
comment
Большое спасибо. Позвольте мне проверить это. и я хочу знать кое-что, как проверить наличие ключей? - person Ponmalar; 08.01.2013

Я не уверен, что использование SharedPreferences (ссылка) подходит для вашего варианта использования.

Вы храните через пару ключ-значение и можете иметь несколько SharedPreferences для каждого приложения. Хотя оба они хранятся как объекты String, значение может быть автоматически преобразовано в другие примитивы с использованием встроенных методов.

Марк Мерфи написал библиотеку cwac-loaderex (ссылка), чтобы упростить доступ к SharedPreferences с помощью шаблон Loader (ссылка), который компенсирует часть необходимой вам работы чтобы держать ввод-вывод вне основного потока.

person ataulm    schedule 08.01.2013