2015-12-18 4 views
2

Я пробовал этот код (см. Ниже), и он говорит: «Не удается разрешить символ« customHandler », я начинаю, поэтому пока не знаю, как исправить эту проблему. Было бы здорово, если бы вы могли объяснить мне, как это исправить.Не удается разрешить символ

Я благодарность за каждую помощь: D

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    //------------------ 
    //------------------ 
    android.os.Handler customHandler = new android.os.Handler(); 
    customHandler.postDelayed(updateTimerThread, 0); 
} 


private Runnable updateTimerThread = new Runnable() { 
    public void run() { 
     //write here whatever you want to repeat 
     customHandler.postDelayed(this, 1000); 
    } 
}; 

Я пытаюсь сделать метод запуск с начала один раз каждой минуты.

+1

у вас есть сообщение об ошибке? – Burki

+0

Проблема заключается в том, что customHandler не отображается в области run(). – duffymo

+0

работает еще? Вы просмотрели ответы? – Jan

ответ

2

customHandler является локальными переменной в методе onCreate, поэтому метод run() не может видеть его.

Сделайте customHandler a членом переменной вашего класса для исправления.

//Member variable 
android.os.Handler customHandler; 

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     //Assign value 
     customHandler = new android.os.Handler(); 
     customHandler.postDelayed(updateTimerThread, 0); 
} 


    private Runnable updateTimerThread = new Runnable() { 
      public void run() 
      { 
      //USE the value 
      customHandler.postDelayed(this, 1000); 
      } 
    }; 
0

customHandler Ваш объект не виден с вашей updateTimerThread.

Попробуйте изменить видимость этой переменной, перемещая ее за пределы вашего метода.

Вот Exemple:

android.os.Handler customHandler; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    //------------------ 
    //------------------ 
    customHandler = new android.os.Handler(); 
    customHandler.postDelayed(updateTimerThread, 0); 
} 


private Runnable updateTimerThread = new Runnable() { 
    public void run() { 
     //write here whatever you want to repeat 
     customHandler.postDelayed(this, 1000); 
    } 
}; 

Но используя Timer и TimerTask может быть лучшим решением, чем рекурсивного вызова postDelay на обработчик.

Это код более чистого кода, и он гарантирует, что он будет работать на определенной частоте (например, каждую минуту), тогда как ваше решение позволяет исправить задержку между окончанием прогона и началом следующего (если потребуется 30 секунд для запуска и задержка составляет 1 минуту, она будет работать каждые 1,5 млн.)

// declare your timer 
Timer basicTimer; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    //------------------ 
    //------------------ 
    // create a Timer 
    basicTimer = new Timer(); 
    // create the periodic task, here it's an anonymous class 
    TimerTask updateTimerThread = new TimerTask() { 
     public void run() { 
      //write here whatever you want to repeat 
      // no need to call postDelayed 
     } 
    }; 
    // schedule the task to run every minutes 
    basicTimer.scheduleAtFixedRate(updateTimerThread, 0, 60*1000); // 1minutes = 60000 ms 
} 
Смежные вопросы