用RecordFilter来查找记录
尽管我没有在ExpensesApp应用程序中完成它,RecordEnumeration也可能完成搜寻记录的功能。为了做到这一点,你要向RecordStore.enumerateRecords传递一个类(该类实现了RecordFilter的接口)的实例,并完全忽略RecordComparator。RecordFilter仅有一个名为matches方法,它接受一个字节数组参数(字节数组代表了某个记录)。该方法用于检测记录,并根据被检测的记录是否符合预定标准而返回“真”或者“假”。
举例来说,假设我们有一个RecordFilter的实现:ExpenseFilter,它在整个记录库中搜寻开销记录中的“开销分类(category)”字段符合ExpenseInfo.CATEGORYMEALS的开销项目,如代码清单C所示。为了获得只有符合上述条件的记录集合(enumeration,枚举),我可以这样组织代码:
RecordStore rs = RecordStore.openRecordStore(RS_NAME);
RecordEnumeration enu = es.enumerateRecords(new ExpenseFilter, null, false);
在这里,变量enu仅包含分类为“膳食”(这在用户界面指点)的开销记录。
工作尚未完成,我们仍需努力
到目前为止,ExpensesApp已经相当完善了。现在,它已经有了个像样的用户界面(包括添加新的开销记录的快捷方式),也有了些实际用处——在运行过程中存储信息。但是仍有一些问题:
- 新添加的开销记录并没有按照排序插入链表中的对应位置。
- ExpenseInfo的实例中的任何改变仅仅更新内存,而没有考虑到如果该实例已经存盘,还需要将更新后的内容重新存盘——我担心这一点可能还没有人看出来。
- 本应用程序还不适合在移动设备运行,因为当它暂停运行时,它没有试图释放它所占用的资源——而这一点是移动设备应用程序所必须考虑的。
在下一篇文章中,我将向你介绍如何用“活的” RecordEnumeration和记录改变通知API来解决上述缺陷。
本文为ZDNet China版权所有,未经许可严禁转载。
责任编辑:炒饭
欢迎评论或投稿
|