首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >J2ME RecordStore中的数据不会在各会话之间持续存在。

J2ME RecordStore中的数据不会在各会话之间持续存在。
EN

Stack Overflow用户
提问于 2009-11-09 22:51:47
回答 6查看 6.1K关注 0票数 2

我正在用J2ME构建一个移动应用程序,我发现我写入RecordStore的数据可以在程序仍在运行时被访问,但是在退出并重新启动程序后会丢失。如果没有异常抛出,数据就会丢失。

更新:感谢大家的建议。我在Windows 7上使用NetBeans,我不确定它是使用我以前安装的WTK版本,还是安装在其他地方的另一个版本。我检查了我的WTK文件夹,看看Pavel写的文件,但是找不到。现在我正在测试我的手机和仿真器中的所有东西都需要持久化的特性,但是当然,能够测试模拟器中的所有内容会好得多。

代码语言:javascript
复制
private RecordStore recordStore = null;

public MyMIDlet() {
    readStuff(); // output: nothing found in recordStore :(
    saveStuff();
    readStuff(); // output: stuff
}

private void readStuff() {
    try {
        recordStore = RecordStore.openRecordStore(REC_STORE, true);
        int n = recordStore.getNumRecords();
        String stuff;

        if (n == 0) {
            stuff = "nothing found in recordStore :(";
        }
        else {
            stuff = new String(recordStore.getRecord(1));
        }

        System.out.println(stuff);
    }
    catch (Exception e) {
        System.out.println("Exception occured in readStuff: " + e.getMessage());
    }
    finally {
        if (recordStore != null) {
            try {
                recordStore.closeRecordStore();
            }
            catch (Exception e) {
                // ignore
            }
        }
    }
}

private void saveStuff() {
    try {
        recordStore = RecordStore.openRecordStore(REC_STORE, true);
        int n = recordStore.getNumRecords();
        byte[] stuff = "stuff".getBytes();
        recordStore.addRecord(stuff, 0, stuff.length);
    } catch (Exception e) {
        System.out.println("Exception occured in saveStuff: " + e.getMessage());
    } finally {
        if (recordStore != null) {
            try {
                recordStore.closeRecordStore();
            } catch (Exception e) {
                // ignore
            }
        }
    }
}
EN

回答 6

Stack Overflow用户

发布于 2010-04-03 20:38:16

我自己也遇到了同样的问题,但是我发现NetBeans或其他什么东西在执行后会删除已部署的程序文件。这些文件位于C:\Documents和Settings\MyUser\javame-sdk\3.0\work\0\appdb文件夹中,在Vista/Win7 7上可能不一样,我猜路径中的数字引用了您当前使用的模拟器。无论如何,在这个文件夹中寻找像您的RecordStore这样的名称。例如"00000002_PSC_onfig.db",这是我的套件配置记录存储,名为PSConfig。把这个复制到。“复制的00000002_PSC_onfig.db”不会被删除。在NetBeans清理完之后,只需将其复制回原来的名称即可。下次在NetBeans中单击run时,您的记录存储将在那里。这是痛苦的,但至少它使您有可能使用模拟器调试您的RMS处理。

票数 2
EN

Stack Overflow用户

发布于 2012-02-25 00:54:41

这个问题已经存在了一段时间了,但是我在用模拟器寻找相同问题的答案时偶然发现了这个问题,但在我的例子中,它是在使用JavaME3SDK时出现的。我找到的解决方案也有可能解决这个问题。

使用:

代码语言:javascript
复制
emulator -Xdescriptor:/path/to/app.jad

将根据文档:“安装一个MIDlet,运行它,并在它完成后卸载它。”

要持久化安装(以及它的数据),您应该使用:

代码语言:javascript
复制
emulator -Xjam:install=<JAD-file-URL>

如果要从本地文件系统安装,可以是一个web地址,也可以是'file:///path/to/app.jad‘’。此安装命令将显示一个应用程序存储号,然后您可以使用它启动模拟器,并通过调用以下方式运行先前安装的应用程序:

代码语言:javascript
复制
emulator -Xjam:run=<application-storage-number>

有关更多命令行选项,请参见文档

票数 2
EN

Stack Overflow用户

发布于 2009-11-10 07:37:25

我终于可以让它在一个真正的手机上工作了。似乎,正如马丁·克莱顿( Martin )所建议的,仿真器重置删除了数据。不过,我仍然在寻找一种在模拟器中启用持久性的方法。

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

https://stackoverflow.com/questions/1704509

复制
相关文章

相似问题

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