2017-06-03 5 views
0

Der Timer überprüfen jede Minute, wenn es eine Änderung der Stunde, wenn es dann eine Schaltfläche muss grün und anklickbar sein, sonst bleibt es rot und nicht anklickbar.Android App Absturz beim Aufruf eines Timers

Bisher erhalte ich diesen Fehler, und ich weiß nicht, wie das zu handhaben: -

android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Timer timer = new Timer(); 

timer.scheduleAtFixedRate(new TimerTask() { 
    @Override 
    public void run() { 
     CHECK(); 
    } 
}, 1*60*1000, 1*60*1000); 



public void CHECK(){ 

    sqliteDbHelper_ = new Sqlite_DBHelper(getActivity()); 
    sqLiteDatabase = sqliteDbHelper_.getWritableDatabase(); 
    String[] columns = {"hour_only","JAKOST"}; 
    cursor = sqLiteDatabase.query("podatki", columns,null,null,null,null,null); 
    Calendar calander = Calendar.getInstance(); 
    Integer currentHour = calander.get(Calendar.HOUR_OF_DAY); 
    buttonSaveOnMainPage.setClickable(true); 
    cursor.moveToLast(); 
    if (cursor.moveToLast()== false){ 
     lastInputedHour = 0; 
    } 
    else{ 
    lastInputedHour = cursor.getInt(0); 
    } 
    Log.e(TAG+"zadnja vnesena URA",""+lastInputedHour); 
    Log.e(TAG+"trenutna URA",""+currentHour); 
    if (lastInputedHour == currentHour){ 
     buttonSaveOnMainPage.setBackgroundResource(R.color.ColorRed); 
     buttonSaveOnMainPage.setClickable(false); 
    } 
    else 
     buttonSaveOnMainPage.setBackgroundResource(R.color.ColorGreenDark); 
     buttonSaveOnMainPage.setClickable(true); 
} 
+1

Lesen Sie diese Antwort: https://stackoverflow.com/questions/5161951/android-only-the-original-thread-that-created-a-view-hierarchy-can-touch -Its-VI – Stanojkovic

Antwort

0

Der Fehler ist ziemlich selbsterklärend. Implementieren Sie den Timer innerhalb der OnClickListener() des UI-Elements. Hier ein Beispiel: -

Button1.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      //Some business logic 
      Update_ui(); 
      if (!Player.isTuningnow) { 
       Button1.setImageResource(R.drawable.btn_pause_pressed); 
       Player.Paused = false; 
       new CountDownTimer(600, 1) { 

        public void onTick(long millisUntilFinished) { 

        } 

        public void onFinish() { 
         Button1.setImageResource(R.drawable.music_btn_play); 
         //Some more business logic 
        } 
       }.start();