探索J2ME:打造一个好的移动设备

开发者在线 Builder.com.cn 更新时间:2002-10-16作者:BUILDER.COM 来源:

解决同步的问题

先前版本的ExpensesApp除了有内存使用的问题外,还有一些数据同步的问题。你可以从上次的文章里回忆起这些,但是我已经在下面把它们列出来了,毕竟离现在已经有些日子了:

  • 关于新开销的数据不会以正确的顺序被自动加入到lsMain列表里。
  • 删除掉的开销项目还在用向量表示,所以仍留在内存和lsMain表单里。我在上一篇文章里解决了这个问题,方法是在每次调用cmDelete命令时重建向量,这是个开销很大的操作方法。我还使用了一个说起来有点像组装兼容机味道的方法决定新的数据在什么时候被加到数据仓里,这将肯定导致一些不需要的向量的产生。
  • 对开销项目的修改被折射到内存中了,而不管它们是否是对应于数据仓的。

使用RMS的记录变更通知系统就可以很容易地解决这些数据同步的问题,这个通知系统是集成在RecordListener接口中的。让我们来仔细看看这个接口。

通过RecondListener来发布记录变更通知

现在Expenses主类实现了一个新的接口,RecordListener。这个接口提供了应用程序记录仓变化的通知。RecondListener接口有三个方法,这三个方法都接受代表记录仓和受影响记录的ID号的自变量。

  • RecordAdded在使用RecordStore.addRecord将一条新的记录加入到记录仓时被激活。
  • RecordDeleted在调用RecordStore.deleteRecord将一条记录从数据仓里删除时被激活。
  • RecordChanged在使用RecordStore.updateRecord将一条记录更新时被激活。

将一个正在执行的类传递到RecordStore的方法addRecordListener,你就能建立一个RecordListener。正如你所预料到的,多个RecordListeners可以被加入到单个的RecordStore中去。

ExpensesApp在本质上使用同样的方法处理这些侦听事件中的每一件,你可以在Listing C看到。添加和删除事件处理程序清除lsMain列表的内容,然后重建expenseItems数组,最后从暂存区里取出数据重建lsMain,以反映出变化。变更事件处理器则相反,只是简单的重建expenseItems数组,因为一条更新过的记录不会影响显示在lsMain里的项目。同时因为我并不关心事件发生之外的其他任何事,所以我就不用对每次事件所收到的RecordStore和ID号自变量做任何事。

除了能为保持MIDlet和本地数据仓同步提供一个简单的方法外,RecordListener API在处理能够独立地从远程数据库完成更新的应用程序时,就便显出了自己的作用。我将在探索J2ME系列的最后一部分里向你展示,这是如何通过普通连接网络完成的。



本文为ZDNet China版权所有,未经许可严禁转载。

责任编辑:炒饭

欢迎评论或投稿

用户评论

  • 用户名
  • 评论内容