codenameoneに基づいたj2meアプリケーションを開発しています。いくつかのコードを実装し、アプリケーションにデータベースを追加したいと思います。たくさん検索した後、モバイルアプリケーションのデータベースの概念を簡素化するcodenameoneのストレージクラスを見つけました。
このアプリケーションでは、エンティティ(人、都市など)ごとにクラスを作成し、データの読み取りと書き込みに「読み取り」メソッドと「書き込み」メソッドを追加します。
一部のエンティティクラスには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に1つのオブジェクトを書き込んで、もう一度読み取るにはどうすればよいですか?
前もって感謝します。