2

我正在开发一个基于代号的 j2me 应用程序。我实现了一些代码,现在我想将数据库添加到我的应用程序中。经过大量搜索,我发现了代号为一个的存储类,它简化了移动应用程序中的数据库概念。

在这个应用程序中,我为每个实体(如人、城市……)创建一个类,并添加“读取”和“写入”方法来读取和写入数据。

一些实体类有 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 中写入一个对象并再次读取它?

提前致谢。

4

1 回答 1

2

您可以将 aVector或 aHashtable存储在 storage 中,并将它们嵌套到您喜欢的深度,例如:

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

等等...您可以添加更多哈希值,它们可以包含字符串、数字或字节数组。

或者,您可以实现 Codename One Externalizable 接口,该接口允许您将任意类写入存储。但是,这提出了一个要求,您需要调用Util.register以注册可外部化的类名。提示者演示中有一个示例。

于 2012-12-19T10:18:19.427 回答