对于我的生活,我无法弄清楚为什么我不能让这种方法进入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);
}
返回true; }
请注意,日志和调试模式显示“start = 0”
我也试过
if (start == 0l) {
if (start == 0L) {
我在这里错过了什么? 0!= 0?
我正在使用Java for Android开发Eclipse。感谢。
编辑:
@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;
}
答案 0 :(得分:3)
我认为你的问题恰恰相反。 我刚刚调试了你的代码并且它有效,问题是if语句总是正确的,因为在对FIRST_USE_DATE变量进行更改后没有editor.com()。
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语句始终为true并且每次都会生成,因为没有editor.commit()将更改保存到FIRST_USE_DATE变量。 / p>
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;
}
答案 1 :(得分:0)
为什么不使用Long start而不是long并检查null值?
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 == null) {
SharedPreferences.Editor editor = settings.edit();
editor.putLong(FIRST_USE_DATE, now);
}
}
似乎在这里发生自动拆箱并且您获得零值。另一个问题是为什么0 == 0检查没有通过。
答案 2 :(得分:0)
你在某处犯了错误......
您确定没有输入if语句并且start = 0?
您是否向我们展示了您正在运行的代码?
您可以执行以下代码(相当于您的代码)
public static void main(String[] args) {
long start = 0;
if (start == 0) {
System.out.println(Long.toString(start));
}
}
你会看到你输入if语句......
答案 3 :(得分:0)
您熟悉隐藏和阴影的概念吗?您是否在此类或其父级之一中使用相同的名称?
我认为您的代码没有任何问题 - 尝试重新启动计算机(它的Microsoft操作系统正确吗?)
如果不起作用,请删除有问题的代码(最后用空方法)编译并测试以确保没有错误。然后硬编码可接受的值并再次测试。最后重新输入您的代码 - 不要粘贴副本。
很久很久以前,我有类似的东西,直到我重新输入代码才消失 - 我最好的猜测是一些隐藏的角色造成了问题,但我再也没见过(也不是我确定那个时候到底发生了什么。)