我想做的事情应该非常简单,我正在调用 IntentService以在后台定期检查当前时间是否在指定时间之前或之后(在MainActivity中作为意图中的Extras传递),并获得一个通知发生的时间。
在线程的run()方法中,我获取当前时间的一个实例,并将其与 if/else 构造中的先前指定实例进行比较,然后重新运行该线程。
问题在于,即使当前时间晚于另一个时间,它也总是“else”。这个问题太奇怪了,谁能解释我的错误在哪里?
这是我的IntentService类:
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。毕竟代码没有缺陷,只是构建过程中的一些事情,需要一些时间来告诉编译器错误不存在:也许缓存中有一个过去错误的副本仍在考虑中,我不确定。
也许您可以在我的最后声明中添加一些信息,发布答案或对此发表评论。
关于android - Android,if/else构造总是失败(编译器无法读取更改),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33320717/