java - 在 if 语句中测试 Java Long 值。 0 != 0 吗

标签 java android eclipse long-integer

我一生都无法弄清楚为什么我不能让这个方法进入 if 语句。

protected void foo() {
    Date d = new Date();
    long now = d.getTime();

    long start;
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    start = settings.getLong(FIRST_USE_DATE, 0);
    Log.w(this.getClass().getName(), Long.toString(start));     

    if (start == 0) {
        SharedPreferences.Editor editor = settings.edit();
        editor.putLong(FIRST_USE_DATE, now);        
    }

返回真; }

请注意,日志和 Debug模式显示“start = 0”

我也尝试过

if (start == 0l) {
if (start == 0L) {

我到底错过了什么? 0 != 0 吗?

我正在 Eclipse 中使用 Java for Android 进行开发。谢谢。

编辑:

@methodin - 不抱歉,那不起作用。

@Aioobe - 我在 IF 语句下有一个断点,但它永远不会被创建。

Edit2:这是自从您询问以来我正在运行的实际代码。

protected boolean isDemoExpired() {
    Date d = new Date();
    long now = d.getTime();

    long demoStart;
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);   
    demoStart = settings.getLong(FIRST_USE_DATE, 0);        

if (demoStart == 0) {
    SharedPreferences.Editor editor = settings.edit();
    editor.putLong(FIRST_USE_DATE, now);
    System.out.println(Long.toString(demoStart)); 
    return false;

}
return true;
    }

最佳答案

我认为你的问题恰恰相反。 我刚刚调试了您的代码并且它可以工作,问题是 if 语句始终为 true,因为对 FIRST_USE_DATE 变量进行更改后没有 editor.commit() 。

protected void foo() {
    Date d = new Date();
    long now = d.getTime();

    long start;
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
    start = settings.getLong(FIRST_USE_DATE, 0);
    Log.w(this.getClass().getName(), Long.toString(start));     

    if (start == 0) {
        SharedPreferences.Editor editor = settings.edit();
        editor.putLong(FIRST_USE_DATE, now);
        ***editor.commit();***       
    }
}

编辑:我刚刚尝试调试您的实际代码,但发生了同样的事情:if 语句始终为真,并且每次都会执行,因为没有 editor.commit() 来保存对 FIRST_USE_DATE 变量的更改。

    protected boolean isDemoExpired() {
    Date d = new Date();
    long now = d.getTime();

    long demoStart;
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);   
    demoStart = settings.getLong(FIRST_USE_DATE, 0);        

    if (demoStart == 0) {
        SharedPreferences.Editor editor = settings.edit();
        editor.putLong(FIRST_USE_DATE, now);
        ****editor.commit();****
        System.out.println(Long.toString(demoStart)); 
        return false;

    }
    return true;
}

关于java - 在 if 语句中测试 Java Long 值。 0 != 0 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4078009/

相关文章:

java - 值引擎不是对象 android.speech.tts.TextToSpeech 的成员

java - 尝试构建 LibGDX 项目时超出 GC 开销限制

android - ScrollView 不起作用

android - 在 android 的屏幕边距上向左、顶部、右侧、底部滑动

Eclipse 生命周期

java - 无法连接 eclipse market place - I/O 异常 (java.net.SocketException) 来自 SOCKS 服务器的格式错误的回复

java - 属性初始化Java

java - 在 Java 中创建一个集合数组

java - Apache Spark : Cannot find symbol error Using array_contains

主机窗口上的Android模拟器无法访问代理