Java Can';无法获取在Runnable中更改的值
我有这样一个代码:Java Can';无法获取在Runnable中更改的值,java,android,android-handler,Java,Android,Android Handler,我有这样一个代码: time = 5; final Handler handler = new Handler(); Runnable runnable = new Runnable() { @Override public void run() { if(time == 0) time = 0; else {
time = 5;
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
if(time == 0)
time = 0;
else {
time --;
}
handler.postDelayed(this, 1000);
}
};
我的应用程序包含一个需要收集“时间”值的按钮,但问题是当我单击该按钮时,“时间”值始终为5,无论何时单击该按钮。我测试了它,“时间”真的减少了1,但我不能得到那个值
单击按钮后如何获取“time”变量的实际值 为处理程序创建一个线程。让线程在后台运行,但让它通过消息包将其信息传递回处理程序。像这样的
private class HandlerThread extends Thread{
private Handler handler;
public HandlerThread(Handler uiHandler){
handler = uiHandler;
}
public void run(){
int time = 5;
Bundle b;
for(int i = 0; i < time; i++){
b = new Bundle();
b.putInt("time_key", time);
Message message = handler.obtainMessage();
message.setData(b);
handler.postDelayed(this, 1000);
handler.sendMessage(message);
}
}
}
HandlerThread handlerThread = new HandlerThread(handler);
handlerThread.start();
你可以这样开始你的后台线程
private class HandlerThread extends Thread{
private Handler handler;
public HandlerThread(Handler uiHandler){
handler = uiHandler;
}
public void run(){
int time = 5;
Bundle b;
for(int i = 0; i < time; i++){
b = new Bundle();
b.putInt("time_key", time);
Message message = handler.obtainMessage();
message.setData(b);
handler.postDelayed(this, 1000);
handler.sendMessage(message);
}
}
}
HandlerThread handlerThread = new HandlerThread(handler);
handlerThread.start();
请注意,您还需要找到一种方法,在线程运行完毕后取消它。这通常是通过创建一个布尔变量来完成的,比如keepRunning,并将其作为while循环放入run()方法中;同时(继续修剪)。然后在mainUi中,当您没有按钮时,将变量更改为false,这样它基本上会终止线程的运行部分。时间是字段变量还是局部变量?它是全局变量。我只是把它放在那里,这样我就不会粘贴整个代码。你可以把它放在一个包中,将包传递给一条消息,然后将消息发送给你的处理程序。然后,您可以在处理程序中接收消息,并将数据从捆绑包中取出。您尝试在哪里读取它?@marcacierno,内部按钮onClickListener。Runnable和onClickListener都在片段的onCreateView中。