чтение объекта записи в хранилище codenameone

Я разрабатываю приложение j2me на основе codenameone. Я реализую некоторые коды, и теперь я хочу добавить базу данных в свое приложение. После долгих поисков я нашел класс Storage с кодовым именем one, который упрощает концепцию базы данных в мобильном приложении.

В этом приложении я создаю класс для каждого объекта (например, человека, города и т. д.) и добавляю методы «чтения» и «записи» для чтения и записи данных.

Некоторые классы сущностей имеют 2 или более полей. Поэтому я должен сохранить и прочитать их с помощью класса Storage.

Как я могу это сделать?

Вот мой пример кода:

package com.x.database;

import com.codename1.io.Storage;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;

public class Person {

    public Person(){
    }
    public Person(int pID, String pPersonNumber){
        ID = pID;
        PersonNumber = pPersonNumber;
    }

    public static String PERSON = "Person";

    private Storage store;
    private int ID;

    public int getID(){
        return ID;
    }

    public void setID(int pID){
        ID = pID;
    }

    private String PersonNumber;

    public String getPersonNumber(){
        return PersonNumber;
    }

    public void setPersonNumber(String pPersonNumber){
        PersonNumber = pPersonNumber;
    }

    public int getLastKeyNumber(){
        if(store == null) {
            store = Storage.getInstance();
        }

        Hashtable depHash = (Hashtable)store.readObject(PERSON);
        ArrayList<String> keyArray = (ArrayList<String>)depHash.keys();

        int i = 0;
        for (Iterator<String> it = keyArray.iterator(); it.hasNext();) {
            int tmp = Integer.parseInt(it.next());
            i = i < tmp ? tmp : i;
        }

        return i;
    }

    public void write(Person pPerson){
        if(store == null) {
            store = Storage.getInstance();
        }

        if(!store.exists(PERSON)) {
            Hashtable depHash = new Hashtable();
            try {
                depHash.put("0", pPerson);
            } catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
            store.writeObject(PERSON, depHash);
        }
        else {
            Hashtable depHash = (Hashtable)store.readObject(PERSON);

            ArrayList<Person> depArray = (ArrayList<Person>)depHash.keys();

            for (Iterator<Person> it = depArray.iterator(); it.hasNext();) {
                Person tmp = it.next();

                if(!tmp.getPersonNumber().equals(pPerson)) {
                    depHash.put(String.valueOf(getLastKeyNumber()), pPerson.getPersonNumber());
                    store.writeObject(Person depHash);
                }
            }
        }
    }

    public ArrayList<Person> readAll(){
        Storage store = Storage.getInstance();

        if(!store.exists(PERSON)) {
            Hashtable depHash = (Hashtable)store.readObject(PERSON);

            return (ArrayList<Person>)depHash.elements();
        }
        return new ArrayList<Person>();
    }
}

В этом коде у меня есть ошибка при записи и чтении объекта в хранилище.

Как я могу записать один объект в Storage и прочитать его снова?

Заранее спасибо.


person Ahmad    schedule 17.12.2012    source источник


Ответы (1)


Вы можете хранить Vector или Hashtable в хранилище и вкладывать их так глубоко, как вам нравится, например:

Vector v = new Vector();
Hashtable content = new Hashtable();
content.put("A", ...);
content.put("B", ...);
v.addElement(content);

И т. д. Вы можете добавить больше хэшей, и они могут содержать строки, числа или массивы байтов.

В качестве альтернативы вы можете реализовать интерфейс Codename One Externalizable, который позволяет вам записывать произвольный класс в хранилище. Однако при этом возникает одно требование: вам нужно вызвать Util.register, чтобы зарегистрировать имя внешнего класса. Пример этого есть в демо типстера.

person Shai Almog    schedule 19.12.2012
comment
Большое спасибо, Шай, я попробую, как ты сказал. - person Ahmad; 19.12.2012