首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发生RecordStoreFullException时奇怪的RecordStore行为

发生RecordStoreFullException时奇怪的RecordStore行为
EN

Stack Overflow用户
提问于 2010-03-17 08:04:01
回答 1查看 531关注 0票数 1

我正在开发一个显示公共汽车站时刻表的小型J2ME应用程序-它们以记录的形式存储在MIDP RecordStores中。

有时记录不能容纳单个RecordStore,特别是在使用setRecord方法的记录更新时,会发生RecordStoreFullException。我捕获了这个异常,并尝试在删除旧RecordStore中的前一个记录的同时,将记录写入新的RecordStore。除了从发生RecordStoreFullException的RecordStore中删除记录之外,其他一切都很正常。如果我尝试删除无法更新的记录,则会抛出另一个InvalidRecordIDException类型的异常。这在MIDP javadoc中很奇怪,而且没有文档记录。我已经在SunWTK2.5.2、MicroEdition SDK3.0和Nokia40系列SDK上进行了测试。此外,我创建了一个代码来再现这种奇怪的行为:

代码语言:javascript
复制
RecordStore rms = null;
        int id = 0;
        try {
            rms  = RecordStore.openRecordStore("Test", true);
            byte[] raw = new byte[192*10024]; //Big enough to cause RecordStoreFullException
            id = rms.addRecord(raw, 0, 160);
            rms.setRecord(id, raw, 0, raw.length);
        } catch (Exception e) {
            try {
                int count = rms.getNumRecords();
                RecordEnumeration en = rms.enumerateRecords(null, null, true);
                count = en.numRecords();
                while(en.hasNextElement()){
                    System.out.println("NextID: "+en.nextRecordId());
                }
                rms.deleteRecord(id); //this won't work!
                rms.setRecord(id, new byte[5], 0, 5); //this won't work too!
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }

我添加了额外的枚举代码来产生其他奇怪的行为-当RecordStoreFullException发生时,getNumRecords和numRecords两个方法都会将计数变量设置为1(如果RMS为空)。System.out.println将生成NextID: 0!记录ID不能为0,不能接受!有人能解释一下这种奇怪的行为吗?

对不起,我的英语不好。

EN

回答 1

Stack Overflow用户

发布于 2010-03-17 20:25:53

你确定setRecord抛出RecordStoreFullException

如果addRecord抛出RecordStoreFullException,那么id永远不会更新,而您正在尝试deleteRecord(0),这可以解释InvalidRecordIDException

在我看来,枚举代码演示了Sun和Nokia的RMS实现中的一个真正的bug (这可能是相同的,因为Series40使用KVM已经很长一段时间了)。您可以通过查看https://phoneme.dev.java.net/上的Sun实现的源代码来精确定位它(假设它仍然在那里

我建议在Series60手机上尝试同样的方法,因为它将包含由塞班开发的RMS实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2459072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档