gpt4 book ai didi

java - J2ME RecordStore 中的数据不会跨 session 持续存在

转载 作者:行者123 更新时间:2023-12-02 11:12:13 25 4
gpt4 key购买 nike

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

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

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
}
}
}
}

最佳答案

如果您使用 Sun WTK,它会在其“appdb”文件夹中创建一个名为“in.use”的文件:

C:\WTK25\appdb\DefaultColorPhone\in.use

如果您以不寻常的方式关闭模拟器(例如杀死一个进程),它不会删除它,并且下次运行模拟器时,它会创建临时文件夹来存储数据:

C:\WTK25\appdb\temp.DefaultColorPhone1

以这种方式启动时,它应该在控制台中打印:“Running with storage root temp.DefaultColorPhone1”。

我修复了它,在我的“.bat”文件中包含一行,用于每次模拟器运行时删除“in.use”文件。但同时运行多个模拟器时应该小心。

关于java - J2ME RecordStore 中的数据不会跨 session 持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1704509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com