Android、if/else 构造总是失败(编译器无法读取更改)
Android, if/else construct always fails (Compiler fails to read changes)
我想做的应该很简单,我正在调用 IntentService 在后台定期检查当前时间是在指定时间之前还是之后(从 MainActivity 的意图中作为 Extras 传递)并在它发生时收到通知。
在 Thread 的 运行() 方法中,我获取了当前时间的一个实例,并将其用作与先前在 if/else 中指定的时间的比较在重新 运行 线程之前构造。
问题是它总是去 "else" 即使当前时间在另一个时间之后。这个问题太奇怪了,谁能告诉我错误在哪里?
这是我的 IntentService class:
public class MyCheck extends IntentService {
int hour = 0; int minute = 0;
int i = 0;
private static final String TAG = "Check";
int hourNow;
int minuteNow;
Handler handler = new Handler();
public MyCheck() {
super(MyCheck.class.getName());
}
@Override
protected void onHandleIntent(Intent intent) {
Log.w(TAG, "Service Started!");
hour = intent.getIntExtra("hour", 0);
minute = intent.getIntExtra("minute", 0);
Log.w(TAG, "Step 1 ");
Thread runnable = new Thread() {
@Override
public void run() {
/* do what you need to do */
Log.w(TAG, "Step 2 ");
/* get current time */
Calendar c = Calendar.getInstance();
hourNow = c.get(Calendar.HOUR);
minuteNow = c.get(Calendar.MINUTE);
//HERE, IT SEEMS THAT IT'S ALWAYS BEFORE hour AND minute
if(hourNow > hour || (hourNow == hour && minuteNow > minute)) {
//SEND
Log.w(TAG, "RUN ");
Intent broadcast = new Intent();
broadcast.setAction(NOTIFICATION_SERVICE);
sendBroadcast(broadcast);
handler.removeCallbacks(this);
}
else {
//NOTHING
i++;
Log.w(TAG, "NOT YET " + i);
}
//REPEAT EVERY 6 SECONDS
try {
sleep(6000);
handler.post(this);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
runnable.start();
}
}
编辑
我发现了您在下面的回答中看到的小问题。
如果有人想用更多关于构建过程中可能出现的问题的信息来完成答案,我们将不胜感激。 TIA
对此的简单解决方案是等待并重新启动 Windows。代码毕竟没有缺陷,它只是构建过程中的一些东西,需要一些时间来告诉编译器错误不存在:也许缓存中有一份过去错误的副本仍然被考虑在内,我不确定。
也许你可以在我最后的陈述中添加一些信息,发布答案或评论。
我想做的应该很简单,我正在调用 IntentService 在后台定期检查当前时间是在指定时间之前还是之后(从 MainActivity 的意图中作为 Extras 传递)并在它发生时收到通知。
在 Thread 的 运行() 方法中,我获取了当前时间的一个实例,并将其用作与先前在 if/else 中指定的时间的比较在重新 运行 线程之前构造。 问题是它总是去 "else" 即使当前时间在另一个时间之后。这个问题太奇怪了,谁能告诉我错误在哪里?
这是我的 IntentService class:
public class MyCheck extends IntentService {
int hour = 0; int minute = 0;
int i = 0;
private static final String TAG = "Check";
int hourNow;
int minuteNow;
Handler handler = new Handler();
public MyCheck() {
super(MyCheck.class.getName());
}
@Override
protected void onHandleIntent(Intent intent) {
Log.w(TAG, "Service Started!");
hour = intent.getIntExtra("hour", 0);
minute = intent.getIntExtra("minute", 0);
Log.w(TAG, "Step 1 ");
Thread runnable = new Thread() {
@Override
public void run() {
/* do what you need to do */
Log.w(TAG, "Step 2 ");
/* get current time */
Calendar c = Calendar.getInstance();
hourNow = c.get(Calendar.HOUR);
minuteNow = c.get(Calendar.MINUTE);
//HERE, IT SEEMS THAT IT'S ALWAYS BEFORE hour AND minute
if(hourNow > hour || (hourNow == hour && minuteNow > minute)) {
//SEND
Log.w(TAG, "RUN ");
Intent broadcast = new Intent();
broadcast.setAction(NOTIFICATION_SERVICE);
sendBroadcast(broadcast);
handler.removeCallbacks(this);
}
else {
//NOTHING
i++;
Log.w(TAG, "NOT YET " + i);
}
//REPEAT EVERY 6 SECONDS
try {
sleep(6000);
handler.post(this);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
runnable.start();
}
}
编辑
我发现了您在下面的回答中看到的小问题。 如果有人想用更多关于构建过程中可能出现的问题的信息来完成答案,我们将不胜感激。 TIA
对此的简单解决方案是等待并重新启动 Windows。代码毕竟没有缺陷,它只是构建过程中的一些东西,需要一些时间来告诉编译器错误不存在:也许缓存中有一份过去错误的副本仍然被考虑在内,我不确定。
也许你可以在我最后的陈述中添加一些信息,发布答案或评论。