我尝试了这段代码(如下所示),它说“无法解析符号'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);
}
};
我试图让方法从每分钟开始运行一次。
答案 0 :(得分:2)
customHandler是方法onCreate
中的本地变量,因此方法run()
无法看到它。
使customHandler成为您要修复的类的成员变量。
//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);
}
};
答案 1 :(得分:0)
customHandler
updateTimerThread
对象。
尝试通过将此变量移出方法之外来更改此变量的可见性。
这是一个例子:
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
}