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中。