【问题标题】:codenameone - Storage file doesn't delete代号 - 存储文件不删除
【发布时间】:2013-05-15 20:24:01
【问题描述】:

我已将存储文件添加到我的 codenameone 应用程序中。在某些情况下,我想删除特定的存储文件并使用一些旧的过滤数据和新数据重新创建它。删除时效果不佳。

首先我在 StorageManager 类中创建清除存储文件的方法:

public void clearData(String pStorageTable){
    Storage.getInstance().deleteStorageFile(pStorageTable);
}

在其他类中我使用这种方法是这样的:

// load all data of specific storage file
// ...

new DBManager().clearData(ThreeTrans.DB_NAME);

// write old data with filtering of specific ID and new data
// ...

这是写入数据的方法:

public void write(ThreeTrans pTT){
    if(store == null) {
        store = Storage.getInstance();
    }

    DB_NAME = "TT";

    if(!store.exists(DB_NAME)) {
        Hashtable depHash = new Hashtable();
        String k = "1" + pTT.getNumber();
        depHash.put(k, pTT.toString());
        store.writeObject(DB_NAME, depHash);
    }
    else {
        Hashtable depHash = (Hashtable)store.readObject(DB_NAME);

        if (!depHash.containsValue(pTT.getNumber())) {
            String k = String.valueOf(getLastKeyNumber());
            depHash.put(k, pTT.toString());
            store.writeObject(DB_NAME, depHash);
        }
    }
}

一开始我是用这个方法来删除存储文件的:

public void clearData(String pStorageTable){
    if(store == null) {
        store = Storage.getInstance();
    }

    for (String str : store.listEntries()) {
        if(str.toLowerCase().startsWith(pStorageTable)) {
           store.deleteStorageFile(str);
        }
    }
}

在这个问题之后这个方法变成了这个;

public void clearData(String pStorageTable){
    Storage.getInstance().deleteStorageFile(pStorageTable);
}

【问题讨论】:

  • “效果不好”是什么意思?你有例外吗?您的最终数据没有满足您的所有需求?
  • 无论如何它都不起作用。没有引发异常,也没有做任何事情。
  • 此存储文件是否来自库?哪一个?
  • 我已经添加了“ThreeTran”的名称。我用这种方式初始化存储文件: Storage store = Storage.getInstance();
  • 当你使用代号时,你看到这个视频了吗? youtube.com/watch?v=Q85K-nSbc_k

标签: java-me storage lwuit codenameone


【解决方案1】:

我假设您没有在输出流或处理文件的输入流上调用 close() 并且文件上仍然存在锁定。此类问题通常是这种情况。

【讨论】:

  • 我使用 writeObject 方法将数据保存到存储文件中,使用 readObject 方法从存储文件中读取数据。是否需要调用close()方法?
  • 没有。您可以发布包含写入代码和正确删除代码的代码吗?应该可以无缝地工作。这是在模拟器上还是在设备上,还是两者兼而有之?
  • 我编辑了我的问题。你的第二个问题的答案是肯定的,我对这个问题有不同的输出,它们(模拟器和设备)都不正确。
  • 看起来您在写入时初始化了 DB_NAME,因此在下一次应用程序调用中它不会被初始化。
  • 我用另一种方法来解决它(只是通过替换数据)。谢谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2021-02-25
  • 2021-10-18
  • 2021-07-07
  • 2017-05-24
  • 2017-03-24
相关资源
最近更新 更多