package myphonebook;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.*;
import javax.microedition.rms.RecordEnumeration;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
public class Model
{
// 这里用Vector模拟持久性存储,下一章会介绍RMS
private Vector entries = new Vector();
private RecordStore Phonebook = null;
private String REC_STORE = new String("Phonebook");
private RecordStore PhonebookID = null;
private String REC_STOREID = new String("PhonebookID");
private String editname = null;
public void Model()
{
this.openRecStorePhonebook();
this.openRecStorePhonebookID();
}
public RecordStore getRecordStore()
{
return this.Phonebook;
}
public void seteditname(Entry name)
{
editname = name.getName();
}
// 创建一个记录存储Phonebook
public void openRecStorePhonebook()
{
// ...
// Create record store if it does not exist
try
{
Phonebook = RecordStore.openRecordStore(REC_STORE, true);
} catch (RecordStoreException e)
{
e.printStackTrace();
} // ...
}
// 创建一个记录存储PhonebookID
public void openRecStorePhonebookID()
{
// ...
// Create record store if it does not exist
try
{
PhonebookID = RecordStore.openRecordStore(REC_STOREID, true);
} catch (RecordStoreException e)
{
e.printStackTrace();
} // ...
}
// 添加联系人
public void addEntry(Entry entry)
{
System.out.println("modeladd1");
int addid = -1;
try
{
// Write data into an internal byte array
ByteArrayOutputStream strmBytes = new ByteArrayOutputStream();
// Write Java data types into the above byte array
DataOutputStream strmDataType = new DataOutputStream(strmBytes);
byte[] record;
// Write Java data types
String s = entry.getEmail();
strmDataType.writeUTF(s);// 写邮件
System.out.println("modeladd1");
s = entry.getMobile();
strmDataType.writeUTF(s);// 写移动电话
s = entry.getName();
strmDataType.writeUTF(s);// 写姓名
s = entry.getNativePlace();
strmDataType.writeUTF(s);// 写籍贯
s = entry.getPhone();
strmDataType.writeUTF(s);// 写固定电话
// Clear any buffered data
strmDataType.flush();
// Get stream data into byte array and write record
record = strmBytes.toByteArray();
// this.openRecStorePhonebook();
System.out.println("modeladd122");
addid = Phonebook.addRecord(record, 0, record.length);
// Toss any data in the internal array so writes
// starts at beginning (of the internal array)
strmBytes.reset();
strmBytes.close();
strmDataType.close();
// Phonebook.closeRecordStore();
System.out.println("modeladd1234+添加完成");
} catch (Exception e)
{
// db(e.toString());
System.out.println(e.toString());
}
System.out.println("modeladd123");
if (addid != -1)
{
try
{
ByteArrayOutputStream strmBytes = new ByteArrayOutputStream();
DataOutputStream strmDataType = new DataOutputStream(strmBytes);
byte[] record;
// Write Java data types
strmDataType.writeInt(addid);// 写id
strmDataType.writeUTF(entry.getName());// 写姓名
// Clear any buffered data
strmDataType.flush();
// Get stream data into byte array and write record
record = strmBytes.toByteArray();
// this.openRecStorePhonebookID();
addid = PhonebookID.addRecord(record, 0, record.length);
// Toss any data in the internal array so writes
// starts at beginning (of the internal array)
strmBytes.reset();
strmBytes.close();
strmDataType.close();
// PhonebookID.closeRecordStore();
} catch (Exception e)
{
// db(e.toString());
System.out.println(e.toString());
}
}
}
// 读取联系人信息
public Entry getEntry(int index)
{
return (Entry) entries.elementAt(index);
}
// 更新联系人信息
public void updateEntry(Entry entry)
{
System.out.print("kaishigengxin 0");
int id = -1;
String name = null;
try
{
System.out.print("kaishigengxin 1");
RecordEnumeration re = PhonebookID.enumerateRecords(null, null,
false);
while (re.hasNextElement())
{
byte[] recData;// = new byte[50];
recData = re.nextRecord();
ByteArrayInputStream strmBytes = new ByteArrayInputStream(
recData);
DataInputStream strmDataType = new DataInputStream(strmBytes);
System.out.print("kaishigengxin 2");
try
{
id = strmDataType.readInt();
name = strmDataType.readUTF();
} catch (Exception e)
{
System.out.print(e.toString());
}
if (name.equals(editname))
{
break;
}
}
} catch (Exception e)
{
// db(e.toString());
System.out.println(e.toString() + "修改出错");
}
try
{
ByteArrayOutputStream strmBytes = new ByteArrayOutputStream();
DataOutputStream strmDataType = new DataOutputStream(strmBytes);
byte[] record;
strmDataType.writeUTF(entry.getEmail());// 写邮件
strmDataType.writeUTF(entry.getMobile());// 写移动电话
strmDataType.writeUTF(entry.getName());// 写姓名
strmDataType.writeUTF(entry.getNativePlace());// 写籍贯
strmDataType.writeUTF(entry.getPhone());// 写固定电话
strmDataType.flush();
// Get stream data into byte array and write record
record = strmBytes.toByteArray();
Phonebook.setRecord(id, record, 0, record.length);
strmBytes.reset();
strmBytes.close();
strmDataType.close();
} catch (Exception e)
{
// db(e.toString());
System.out.println(e.toString());
}
try
{
ByteArrayOutputStream strmBytes = new ByteArrayOutputStream();
DataOutputStream strmDataType = new DataOutputStream(strmBytes);
byte[] record;
strmDataType.writeInt(id);// 写邮件
strmDataType.writeUTF(entry.getName());// 写姓名
strmDataType.flush();
// Get stream data into byte array and write record
record = strmBytes.toByteArray();
PhonebookID.setRecord(id, record, 0, record.length);
strmBytes.reset();
strmBytes.close();
strmDataType.close();
} catch (Exception e)
{
// db(e.toString());
System.out.println(e.toString());
}
}
// 读取所有联系人
public Entry[] getAll()
{
Entry[] ret = null;
try
{
RecordEnumeration ree = Phonebook.enumerateRecords(null, null,
false);
// System.out.println(ree.numRecords());
ret = new Entry[ree.numRecords()];
int i = 0;
// System.out.println("model3 " + ree.numRecords());
// String temp[]=new String[ree.numRecords()];
while (ree.hasNextElement())
{
int j = ree.nextRecordId();
byte[] recData = Phonebook.getRecord(j);
ByteArrayInputStream strmBytes = new ByteArrayInputStream(
recData);
DataInputStream strmDataType = new DataInputStream(strmBytes);
try
{
String email = strmDataType.readUTF();
String Mobile = strmDataType.readUTF();
String Name = strmDataType.readUTF();
String NativePlace = strmDataType.readUTF();
String Phone = strmDataType.readUTF();
ret[i] = new Entry(email, Mobile, Name, NativePlace, Phone);
i++;
} catch (Exception e)
{
System.out.print(e.toString());
}
}
} catch (RecordStoreException e)
{
e.printStackTrace();
System.out.println("model7");
}
System.out.println("model8 ");
return ret;
}
public int size()
{
return entries.size();
}
// 删除联系人
public void removeEntry(Entry entry)
{
int removeid = -1;
String name = null;
try
{
RecordEnumeration re = PhonebookID.enumerateRecords(null, null,
false);
while (re.hasNextElement())
{
byte[] recData = re.nextRecord();
ByteArrayInputStream strmBytes = new ByteArrayInputStream(
recData);