2016-03-12 4 views
2

Я хочу сделать что-то вроде этого:Выполнить метод, если дата на следующий день

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity); 

int i = (int) (new Date().getTime()/1000); 

    if( ) // next day 
    { 
     mymethod(); 
    } 
} 

Когда в системе Дата новый день, то я хочу, чтобы позвонить mymethod()

+0

Новый день по сравнению с чем? Вам понадобится ссылка на другую Дату, чтобы сравнить ее, если она разделена на один день. – chRyNaN

+0

, вероятно, сложно – Kamil

+0

Совсем нет. Сохраните значение в SharedPreferences. Затем извлеките его, когда вам нужно, и у вас есть условие, чтобы определить, на следующий день. – chRyNaN

ответ

0

С новым днем ​​вы имеете в виду после полуночи? Итак, вы хотите определить, отличается ли дата от последнего времени?

@Override 
    protected void onResume() { 
    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
    int lastTimeStarted = settings.getInt("last_time_started", -1); 
    Calendar calendar = Calendar.getInstance(); 
    int today = calendar.get(Calendar.DAY_OF_YEAR); 

    if (today != lastTimeStarted) { 
     //startSomethingOnce(); 

     SharedPreferences.Editor editor = settings.edit(); 
     editor.putInt("last_time_started", today); 
     editor.commit(); 
    } 
    } 
+0

например \t Если время 00:01 // Это начинает новый день {my mythod что-то делать, когда я включаю активность} – Kamil

+0

Но я также хочу вызвать mymethod() только один раз в день – Kamil

+0

Затем вам нужен только Calendar.DAY_OF_YEAR, сегодня 73 день 2016 года и остается таким же до полуночи, после полуночи это будет 74 дня, вот когда ваше приложение запустит mymethod(). Этот метод вызывается не чаще одного раза в день. –

0

Рекомендуется использовать Calendar класс вместо Date. Вы можете проверить, прошел ли следующий день:

  1. О некоторых событиях, например. нажатие кнопки, приложение первого запуска, сэкономить время в sharedPreferences
  2. Получить это значение и сравнить его с текущим временем просто иллюстрация о том, как это сделать:

    protected void onCreate(Bundle savedInstanceState){ 
    
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity); 
    
        Calendar c = Calendar.getInstance(); 
        int currentTimeSeconds = c.get(Calendar.SECOND); 
    
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
        int secondsPreviousDay = prefs.getInt("seconds", 0); 
        if (secondsPreviousDay != 0){ //means there was an earlier set value from previously entering the activity 
         //compare if more than 3600*24 = 86400 (1 day in seconds) had passed 
         if (currentTimeSeconds - secondsPreviousDay > 86400){ 
          mymethod(); 
         } 
        } 
        else { 
         prefs.edit().putInt("seconds", currentTimeSeconds).apply(); 
        } 
    } 
    

В моем коде Предполагалось, что вы хотите увидеть, прошел ли день с первого раза, когда вы начали эту деятельность до второго раза. Вы можете настроить это по своему усмотрению, но я надеюсь, что идея понятна.

Я знаю, что я мог бы сжать эти 2, если бы в один, но я просто хотел, чтобы было более ясно, что я был после.

+0

Ну, тогда просто добавьте в sharedPreferences везде, где захотите, и извлеките его где-нибудь еще и сравните значение с текущим временем, как в моем коде. У вас есть другие вопросы? – Vucko

+0

Мой метод вызовет только один раз в день, а не снова и снова? – Kamil

+0

Для этого: просто добавьте еще одну мелочь, либо напишите новое время в SharedPreferences каждый раз, когда вы запускаете свой метод, либо сохраняете какой-то дневной счетчик и индикатор того, было ли событие уже запущено в тот день или нет. – Vucko

0

Отличная идея!

В моей первой деятельности я поставил что-то вроде этого внутри OnCreate:

Calendar c = Calendar.getInstance(); 
    int currentTimeSeconds = c.get(Calendar.SECOND); 
    SharedPreferences share = PreferenceManager.getDefaultSharedPreferences(this); 
    SharedPreferences.Editor edittime = share.edit(); 
    edittime.putInt("timevalue",currentTimeSeconds); 
    edittime.commit(); 

и использовать свой код в другой деятельности внутри OnCreate:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    int secondsPreviousDay = prefs.getInt("seconds", 0); 
    if (secondsPreviousDay != 0){ //means there was an earlier set value from previously entering the activity 
     //compare if more than 3600*24 = 86400 (1 day in seconds) had passed 
     if (currentTimeSeconds - secondsPreviousDay > 86400){ 
      // mymethod(); 
      mymethod(); 

     } 
    } 
    else { 
     prefs.edit().putInt("seconds", currentTimeSeconds).apply(); 
    } 
} 

Я извиняюсь за это, но я все еще обучение

+0

Я что-то не так? – Kamil

+0

вы используете две разные SharedPreferences, посмотрите: – Vucko

+0

SharedPreferences share = getSharedPreferences ("TIME", MODE_PRIVATE); AND SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences (это); Вам нужно, чтобы он был тем же SharedPreferences. – Vucko

Смежные вопросы