一个特定的值是'当我关闭应用程序时,t存储在phonegap内的本地存储中..其他

A particular value isn't stored in localstorage within phonegap when I close the app... Other do..Why?

本文关键字:存储 应用程序 其他 phonegap 一个      更新时间:2023-09-26

我花了整整一周的时间试图让它发挥作用,但它仍然没有!我确信这没什么大不了的!我是phonegap和jquery的新手,我认为我没有正确地实现脚本。

所以我在我的应用程序中有他的功能,我有5个生命,每次我按下一个按钮,它们就会减少,6秒后就会再生,如果应用程序关闭的话!!(此外,我将更改时间,并删除按钮,我将设置为每次玩家失去等级时删除生命,如果生命==0,则不启动等级,因此目前这不是问题)

这个脚本活动减少了我按下删除生命按钮的时间和当前时间,如果它大于或等于6秒,它会增加代表该差距的生命。

我还有一个网络示例,它可以工作,除了一个奇怪的事实,即只有在我随机点击页面上的某个地方时,生命和日期值才会在本地存储和div中更新。(这个脚本帮助我制作了一个人,但他也不知道如何修复这个bug)https://student.sps-prosek.cz/~eisead11it/web/IS/Administrace/index.html

我需要在我的phonegap应用程序中使用此脚本。在实现它之后,我看到了另一个大问题:如果我关闭应用程序并重新打开它,它就不起作用。

今天我还在移动版上做了一整天的步骤,试图找到错误。。。我在每一步上都从设备中提取了新的本地存储数据库:

1) 我清空了本地存储并进入了应用程序,我杀死了一些生命,他们恢复了正常。2) 我让应用程序的5条生命都处于活动状态,然后我关闭了它3) 1秒后,我重新打开它,发现本地存储中的数据是空的4) 当我按下删除实时按钮时,寿命会缩短,但本地存储中没有存储任何数据!!!没有生命在再生5) 如果我等待5*15秒(此时所有生命都应该重新生成的时间,应用程序和本地存储中的当前生命状态为0),或者如果我最小化应用程序并最大化,然后再次按下按钮,则日期存储在本地存储中,当前生命设置为4,生命开始正常再生,直到达到5。

如果我重新进入应用程序并按下按钮,我不知道为什么没有存储日期。这可能就是问题所在。

否则,在第一次运行应用程序时,一切都很好。

我在galaxys2、galaxys2 mini、eclipse模拟器和ripple emlator上测试了它,所有的效果仍然相同。

奇怪的是,lvl和life值100%完美地存储在localsorage中,当我重新进入应用程序时,它们仍然存在,除了重新进入应用后丢失的日期值。

我真的不知道为什么?我认为这个错误是因为日期没有正确保存,或者当我重新启动应用程序时它被删除了。

这是神奇的脚本:

只是一个小型日期验证器。。。

Date.prototype.isValid = function(first_argument) {
    if ( Object.prototype.toString.call(this) !== "[object Date]" )
        return false;
    return !isNaN(this.getTime());
}

从localStorage 检索变量中的主var声明

var timeout = null;
var maxlife = 5;
if (undefined === localStorage.life) {
    localStorage.life = maxlife;
}
if (undefined === localStorage.date||localStorage.date!="") {
    localStorage.date = "";
    var date = null;
}else{
    var date = new Date(Number(localStorage.date));
    if(!date.isValid()){
        date = null;
    }
}
var timeoutTime = 5 * 60000;
var life = Number(localStorage.life);

失去生命,设定日期,如果还没有。也设置一个超时并减去寿命(并将其写入本地存储)。

function loseLife() {
    if (null === date) {
        date = new Date();
        localStorage.date = date.getTime();
        timeout = setTimeout(function(){addLife()}, timeoutTime);
    }
    life--;
    localStorage.life = life;
    lives.innerHTML = life;
    console.log(life);
}

添加生命,设置日期新日期或完全重置日期。如果需要,设置一个超时,并添加一个生命(并将其写入本地存储)。

function addLife() {
    life++;
    localStorage.life = life;
    if (life < maxlife) {
        date = new Date();
    localStorage.date = date.getTime();
        timeout = setTimeout(function(){addLife()}, timeoutTime);
    } else {
        date = null;
    localStorage.date = "";
    }
    lives.innerHTML = life;
}

在这里,您可能需要更改模糊(窗口不可见)和聚焦(窗口再次可见)的挂钩。模糊只是清除超时,这样它就不会干扰我们。

window.addEventListener('blur', function () {
    clearTimeout(timeout);
});

这个函数检查它可以从现在和我们失去生命的日期之间的差异中减去我们获得生命所需的时间。

function tillNow(){
    if (life < maxlife&&date!=null) {
        var d = new Date();
        var diff = d - date;
        while (diff - timeoutTime > 0) {
            diff = diff - timeoutTime;
            if (life < maxlife) {
                life++;
                console.log("add");
            }else{
                date = null;
                localStorage.date = "";
                break;
            }
        }
        lives.innerHTML = life;
        localStorage.life = life;
        if (life < maxlife) {
            date = new Date((new Date()).getTime()-diff);
            localStorage.date = date.getTime();
            timeout = setTimeout(function(){addLife()}, timeoutTime-diff);
        }
    }
}

Focus只需调用tillNow()

window.addEventListener('focus', function () {
    tillNow();
});

Onload的作用与focus相同,但最初会用一个值填充div。。。

window.onload=function(){
    var lives = document.getElementById("lives");
    lives.innerHTML = life;
    tillNow();
}

好吧,这是我的回购:https://bitbucket.org/alecstheone/whatsnap

js存储在/platforms/android/assets/www/js/index.js中(不在第一个www文件夹中)

如果有人能看看这是否是我实现的梦想,因为我呆了整整一周,整天都在修复它,没有回音,而且有这么多人支持我。

经过一周的疼痛,我终于把它治好了。。有一个错误:在第二个if中,如果在主var声明中,它应该是这样的:

if (undefined === localStorage.date||localStorage.date=="")

我还删除了模糊和焦点事件,并使用phonegap中的onDeviceReady事件进行第一次声明和tillNow()调用!