0

То, что я пытаюсь сделать, должно быть довольно простым, я звоню в IntentService, чтобы периодически проверять в фоновом режиме, если текущее время до или после в указанное время (передано как Дополнительно в намерении от MainActivity) и получать уведомление, когда это произойдет.Android, если/else конструкция всегда терпит неудачу (компилятор не может прочитать изменения)

В методе run() Thread я получаю экземпляр текущего времени и использую его в качестве сравнения с ранее указанным в конструкции if/else, прежде чем перезапустить Thread. Проблема в том, что он всегда идет «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(); 

} 

} 

EDIT

Я нашел тривиальные проблемы, как вы можете увидеть в моем ответе ниже. Если кто-то хочет завершить ответ с дополнительной информацией о проблемах, которые могут возникнуть во время процесса строительства, они будут оценены. TIA

+0

Я думаю, что проблема заключается в ценности, которую вы получаете от «Намерения». Не могли бы вы добавить журналы для регистрации 'hour',' minute', 'hourNow',' minuteNow'. Запишите их непосредственно перед оператором 'if'. Затем опубликуйте журнал здесь. – Henry

+0

@Henry Пробовал тот же код сегодня утром и теперь работает ... Журналы показывают правильные часы и минуты ... это не первый раз, когда это происходит, я думаю, что Android Studio иногда переворачивается. Спасибо за комментарий в любом случае! – Ruffio

ответ

0

Простым решением было подождать и перезагрузить Windows. В конце концов, код не был испорчен, это просто что-то на строительном процессе, которое потребовало времени, чтобы сообщить компилятору, что ошибки там нет: возможно, в кеше была копия прошлой ошибки, которая все еще принималась во внимание, я не уверен.

Возможно, вы сможете добавить подробную информацию в мое последнее заявление, разместить ответ или оставить комментарий.