0

The timer check every minute if there is a change of hour if it is then a button need to become green and clickable otherwise it stays red and un-clickable.

So far I am getting this error and I don't know how to handle this:-

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);
}
Zakir
  • 2,222
  • 21
  • 31
  • 1
    Read this answer: https://stackoverflow.com/questions/5161951/android-only-the-original-thread-that-created-a-view-hierarchy-can-touch-its-vi – Stanojkovic Jun 03 '17 at 15:16

1 Answers1

0

The error is quite self explanatory. Implement the timer inside the OnClickListener() of the UI element. Here's an example:-

  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();
Zakir
  • 2,222
  • 21
  • 31