WebView应用程序(PhoneGap Build),重启后不保存localStorage

时间:2016-03-24 09:39:16

标签: android cordova local-storage

出于某种原因,当我重新启动PhoneGap应用程序时 - 它会丢失之前存储的 localStorage 值。我正在以正常的方式保存它们:

localStorage.setItem("foo","value");

这样存放就好了。但是,当您重新启动应用程序(或将设备关闭一段随机时间)时,它似乎会随机丢失数据。我发现了很多关于此事的帖子 - 但没有关于如何在PhoneGap Build WebView应用程序中保持持久性的明确答案,

欢迎任何建议!

这似乎是WebView应用程序的一个常见问题:

我找不到适用于PhoneGap Build应用的解决方案

我正在使用的一个实际例子是:

    var current_id = parseInt(currentId) + 1;
    localStorage.setItem("entry_"+current_id,save_string);
    localStorage.setItem("entryId",current_id);

..然后提取它(不是这很重要,因为问题在于数据丢失,而不是访问它)

                for (var i = 0; i < localStorage.length; i++){
                    if (localStorage.key(i).match("entry_")) {
                        outputString += "\n" + localStorage.getItem(localStorage.key(i));
                    }
                }

我想知道是否可以从 PhoneGap Build cli-5.2.0 升级到 cli-6.0.0 。我会这样做,并给它一个旋转。

我想另一个选择是使用SQL数据库本地存储设备(设置起来有点棘手,意味着重写我的代码)

更新:不是理想的解决方案 - 但我现在已经将应用程序移到了应用程序的WebSQL上。得到它的悬念(以前从未使用它)有点棘手 - 但似乎做了这个工作,并且不应该丢失数据:)

1 个答案:

答案 0 :(得分:0)

修改

我尝试了这样,它起作用了:

&#13;
&#13;
    var current_id = parseInt(currentId) + 1;
    localStorage.setItem("entry_"+current_id,save_string);
    localStorage.setItem("entryId",current_id);
/*
    //this is for checking, what is stored in localStorage
    console.log("length: " + localStorage.length);
    for(var i = 0; i < localStorage.length; i++) {
        console.log(localStorage.key(i));
    }
*/

    var myEntryIdFromStorage = localStorage.getItem("entryId");
    var myItem = localStorage.getItem("entry_" + myEntryIdFromStorage);
&#13;
&#13;
&#13;

澄清的旧答案

如何获得本地存储?

通常你应该像你一样存储物品:

&#13;
&#13;
var permanentStorage = window.localstorage;

permanentStorage.setItem("foo", "bar");
&#13;
&#13;
&#13;

通过以相同的方式初始化permanentStorage来取回它们:

&#13;
&#13;
//assuming you have permanentStorage in the same script file
//or else you have to initialize it again:
//var permanentStorage = window.localstorage;

var myItem = permanentStorage.getItem("foo");
console.log("myItem: " + myItem);
&#13;
&#13;
&#13;

方法商店项使用两个参数:标识符和数据本身。请检查您存储数据的标识符与您获取数据的标识符相同。

你有任何错误吗?返回(存储在myItem中的示例中)是null还是undefined还是只是一个空字符串?这在浏览器或设备上是否会失败?

您可以通过提供更多代码或错误消息来澄清您的问题!