站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题详解RMS(三)

详解RMS(三)

摘要: 详解RMS(三)
作者:


监听记录仓库的变化
记录管理系统提供了一個监听机制,让我們可以随时了解记录管理系统中的资料情況,比如说是否有一条新的记录加入记录仓库、纪录是否被刪除、或者是否有记录被修改等等。
这套监视系统是使用RecordListener接口来完成的。
RecordListener 支持multicast,也就是同时可以有許多人注册监视记录存储的状况。


当有记录被添加入记录仓库时就会触发recordAdded方法。
public void recordAdded(RecordStore rs,int recordid)
{
try
{
byte []tmp = rs.getRecord(recordid) ;
System.out.println("Record " + recordid + "is added.") ;
System.out.println("Content=" + tmp[0] + tmp[1]) ;
}catch(Exception e)
{
System.out.println(e.getMessage()) ;
}
}
纪录被刪除时会触发recordDeleted方法:
public void recordDeleted(RecordStore rs,int recordid)
{
try
{
//請勿在此使用byte []tmp = rs.getRecord(recordid) ;
//因為此時該筆記錄已被刪除
System.out.println("Record " + recordid + "isdeleted.") ;
}catch(Exception e)
{
System.out.println(e.getMessage()) ;
}
}

有记录被修改是触发recordChanged方法。

public void recordChanged(RecordStore rs,int recordid)
{
try
{
byte []tmp = rs.getRecord(recordid) ;
System.out.println("Record " + recordid + "ischanged.") ;
System.out.println("Content=" + tmp[0] + tmp[1]) ;
`}catch(Exception e)
{
System.out.println(e.getMessage()) ;
}
}
三个方法都以记录存储和记录ID作为参数。
使用範例如下:
RLTest.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
import javax.microedition.rms.* ;
public class RLTest extends MIDlet implements RecordListener
{
private Display display;
public RLTest()
{
display = Display.getDisplay(this);
}
public void startApp()
{
String dbname = "testdb" ;
Form f = new Form("RS Test") ;
RecordStore rs = openRSAnyway(dbname) ;
rs.addRecordListener(this) ;
if( rs == null )
{
//開啟失敗停止MIDlet
f.append("Table open fail") ;
}else
{
try
{
byte []data = new byte[2] ;
data[0] = 15 ;
data[1] = 16 ;
int id = rs.addRecord(data,0,data.length) ;
data[0] = 25 ;
data[1] = 26 ;
rs.setRecord(id,data,0,data.length) ;
rs.deleteRecord(id) ;
rs.addRecord(data,0,data.length) ;
rs.closeRecordStore() ;
deleteRS(dbname) ;
}catch(Exception e)
{
}
}
display.setCurrent(f) ;
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void recordAdded(RecordStore rs,int recordid)
{
try
{
byte []tmp = rs.getRecord(recordid) ;
System.out.println("Record " + recordid + "is added.") ;
System.out.println("Content=" + tmp[0] + tmp[1]) ;
}catch(Exception e)
{
System.out.println(e.getMessage()) ;
}
}
public void recordChanged(RecordStore rs,int recordid)
{
try
{
byte []tmp = rs.getRecord(recordid) ;
System.out.println("Record " + recordid + "ischanged.") ;
System.out.println("Content=" + tmp[0] + tmp[1]) ;
`}catch(Exception e)
{
System.out.println(e.getMessage()) ;
}
}
public void recordDeleted(RecordStore rs,int recordid)
{
try
{
//請勿在此使用byte []tmp = rs.getRecord(recordid) ;
//因為此時該筆記錄已被刪除
System.out.println("Record " + recordid + "isdeleted.") ;
}catch(Exception e)
{
System.out.println(e.getMessage()) ;
}
}
public RecordStore openRSAnyway(String rsname)
{
RecordStore rs = null ;
//名稱大於32 個字元就不接受
if(rsname.length() > 32)
return null ;
try
{
rs = RecordStore.openRecordStore(rsname,true) ;
return rs ;
}catch(Exception e)
{
return null ;
}
}
public boolean deleteRS(String rsname)
{
if(rsname.length() > 32)
return false ;
try
{
RecordStore.deleteRecordStore(rsname) ;
}catch(Exception e)
{
return false ;
}
return true ;
}
}
需要说明的是这些回调函数都是在记录存储完成动作之后才被调用,而非之前,因此在示例之中唯一需要留意的地方只有在recordDeleted()函数。我們recordAdded()或recordChanged()里面仍然可以利用getRecord()取出该记录,但是无法在recordDeleted()函式之中这样做。因为我們的函数是在纪录被刪除之后才被调用的,因此該记录早已不复存在了,所以请勿在recordDeleted()函数里头使用getRecord()取得刚被刪除的资料。




↑返回目录
前一篇: GPRS技术和应用介绍
后一篇: MIDlet 国际化[转贴]