三星Galaxy S4上的Codename One Storage行为

时间:2016-07-03 17:57:12

标签: codenameone

在我的应用程序中,一些数据以时间戳流式传输到设备中,因此我将其存储在Hashtable结构中。如果用户需要,它也会保存到存储器中供以后查看或以CSV文件形式发送电子邮件。这适用于iOS设备,以及运行4.4和6.0的两个不同(非三星)品牌的Android设备。它不适用于运行5.0.1的三星Galaxy S4。

程序按如下方式工作,用户按下停止按钮后,将调用以下方法:

public void stopLogging() {
    isLogging = false;
    dataStorage.flushStorageCache();
    dataStorage.writeObject(fileName, dataLogValues);
    dataLogValues.clear();
}

dataLogValues是Hashtable。

当有时间访问记录的数据时,会收集一个可用文件名列表,其中包含用于访问特定日志的按钮。

public String[] getLogList() {
    return dataStorage.listEntries();
}

之前在构造函数

中初始化了dataStorage
dataStorage = Storage.getInstance();

从存储条目的String []中选择日志时,将调用以下方法来检索文件:

public Hashtable<Long, Integer> getLog(String logName) {
    dataStorage.clearCache();
    Hashtable<Long, Integer> log = (Hashtable<Long, Integer>) dataStorage
            .readObject(logName);
    return log;
}

在三星设备上,我添加了一个对话框,显示每个日志文件名,因为我遍历条目名称的String [],我只得到以下内容:

&#34; rList-(完整包名).RallyPacControlStub&#34;其中RallyPacControl是应用程序的名称。如果我还显示String []的大小,我会得到我保存的日志数量的预期条目数。这是我处理日志条目的代码,并避免我不想要的文件。为此创建的日志文件仅由表示创建时间的时间/日期字符串命名。

String[] logList = dataBuffer.getLogList();
    for (int i = 0; i < logList.length; i++) {
        Dialog.show("Log name", logList[i], "OK", null);
        if (!logList[i].equalsIgnoreCase("Cookies")
                && !logList[i].startsWith("CN1")
                && !logList[i].equals("Infopage")
                && !logList[i].startsWith("Chart")
                && !logList[i].startsWith("Log")) {
            String log = logList[i];
            Container buttonContainer = new Container();
            buttonContainer.setUIID("LogButtonContainer");
            buttonContainer.setName("LogListContainer");
            buttonContainer.setLayout(new BoxLayout(BoxLayout.X_AXIS));
            buttonContainer.add(new ShowLogButton(log, dataBuffer
                    .getLog(logList[i])));
            buttonContainer.add(new ExportLogButton((logList[i])));
            buttonContainer.add(new LogDeleteButton(log, this));
            logsContainer.add(buttonContainer);
        }
    }

1 个答案:

答案 0 :(得分:1)

我一定错过了Hashtable读取的行。三星设备可能在层次结构中有一个隐藏文件,用于指示您可以访问的文件系统元数据,因此使用文件前缀通常是一个好主意。

这也可能是Log.p() API中写入该位置的文件。请注意,Storage API并不保证只返回您写入存储的文件。