2016-04-13 4 views
1

Я работаю над проектом студии Android, пытающимся изменить изображение каждые полчаса, Я следовал примеру, но мне не повезло; это не приводит к возникновению ошибок, он просто doesen't работу, вот что я имею и то, что я пробовал:Изменение изображения в определенное время

public class MainActivity extends AppCompatActivity { 

long startTime = 0; 
Handler feed = new Handler(); 
Runnable runTimer = new Runnable() 
{ 
    @Override 
    public void run() { 
     Calendar now = Calendar.getInstance(); 
     TextView output = (TextView) findViewById(R.id.output); 
     ImageView roto = (ImageView) findViewById(R.id.earthView); 
     Globals g = (Globals) getApplication(); 
     int vision = 0; 
     int visionb = 0; 
     int hour = now.get(Calendar.HOUR); 
     int minute = now.get(Calendar.MINUTE); 
     String[] epos = g.getData56(); 

     if (minute >= 30) { 
      visionb = 1; 
     } 
     if (minute < 30) { 
      visionb = 0; 
     } 
     long millis = System.currentTimeMillis() - startTime; 
     int seconds = (int) (millis/1000); 
     int minutes = seconds/60; 
     seconds = seconds % 60; 
     output.setText(String.format("%d:%02d", minutes, seconds)); 
     vision = ((hour * 2) + visionb); 
     int resID = getResources().getIdentifier(epos[vision], "drawable", getPackageName()); 
     if (roto != null) { 
      roto.setImageResource(resID); 
      feed.postDelayed(this, 500); // tried moving this around and changing the value from 0 - 3000 
     } 
     startTime = System.currentTimeMillis(); 
     feed.postDelayed(runTimer, 500); // tried moving this around and changing the value from 0 - 3000 
    } 
}; 

Чтобы проверить мой код, который я положил это в методе onUserInteraction и он работает прекрасно:

@Override 
    public void onUserInteraction() { 
    super.onUserInteraction(); 
    final Globals g = (Globals) getApplication(); 
    Calendar now = Calendar.getInstance(); 
    ImageView roto = (ImageView) findViewById(R.id.earthView); 
    int vision = 0; 
    int visionb = 0; 
    int hour = now.get(Calendar.HOUR); 
    int minute = now.get(Calendar.MINUTE); 
    String[] epos = g.getData56(); 

    if (minute >= 30) { 
     visionb = 1; 
    } 
    if (minute < 30) { 
     visionb = 0; 
    } 
    vision = ((hour * 2) + visionb); 
    int resID = getResources().getIdentifier(epos[vision], "drawable", getPackageName()); 
    if (roto != null) { 
     roto.setImageResource(resID); 
    } 
} 

Итак, я предполагаю, что я что-то делаю неправильно, Кто-нибудь знает, что я делаю неправильно или не хватает?

Спасибо за помощь Landice Это рабочий результат, дающий мне как часы, так и каждые полчаса дня меняет мое изображение (всего 48 изображений), еще раз спасибо за помощь!

long startTime = 0; 
{ 
final Handler feed = new Handler(); 
final Runnable runTimer = new Runnable() { 
    @Override 
    public void run() { 

     Calendar now = Calendar.getInstance(); 
     TextView output = (TextView) findViewById(R.id.output); 
     ImageView roto = (ImageView) findViewById(R.id.earthView); 
     Globals g = (Globals) getApplication(); 
     int vision = 0; 
     int visionb = 0; 
     int second = now.get(Calendar.SECOND); 
     int hour = now.get(Calendar.HOUR); 
     int minute = now.get(Calendar.MINUTE); 
     String[] epos = g.getData56(); 
     if (minute >= 30) {visionb = 1;}    
     if (minute < 30) {visionb = 0;} 
     output.setText(String.format(hour + ":" + minute + ":" + second)); 
     feed.postDelayed(this, 0); 
     if (minute == 30 || minute == 0) {vision = ((hour * 2) + visionb); 
      int resID = getResources().getIdentifier(epos[vision], "drawable", getPackageName()); 
      if (roto != null) { 
      roto.setImageResource(resID); 
      } 
     } 
     startTime = System.currentTimeMillis(); 
    } 
}; 
feed.postDelayed(runTimer,1000); 
} 

ответ

2

Я думаю, что вы забыли запланировать первое сообщение. Это пример использования Handler и Runnable для планирования периодических событий. Эта строка планирует первый запуск.

handler.post(runTimer); 

И эта линия внутри перспективе() расписания для позже событий в то время он работает:

handler.postDelayed(this, 1000); 

Остерегайтесь этого 1000 означает одну секунду. Поэтому 30 минут будет 60 * 1000 * 30, что составляет 1800000 в вашем случае.

Пример:

public class MainActivity extends AppCompatActivity { 

    TextView mTextView; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mTextView = (TextView) findViewById(R.id.textview); 

     final Handler handler = new Handler(); 
     Runnable runTimer = new Runnable() 
     { 
      @Override 
      public void run() { 
       mTextView.setText("Current Time: " + (new Date()).toString()); 
       handler.postDelayed(this, 1000); 
      } 
     }; 

     handler.post(runTimer); 
    } 
} 

Кроме того, вы можете остановить цикл, удалив запланированное замедленное событие по:

handler.removeCallbacks(runTimer); 
+0

Спасибо да, что это то, что я сделал, я не scedual первый post и имел handler.post (runTimer) в неправильном месте – Wraithious

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