是不是可以访问处理程序内的类变量?

时间:2014-05-05 08:31:45

标签: android handler android-handler

我的班上有一个全局布尔变量,而且我的班上也有一个处理程序。我希望处理程序只在类的变量为true时执行一些代码,但它不起作用,因为对于处理程序,变量总是为false。我不明白为什么,因为有时这个值是真的,我用变量值的日志检查它,但是对于处理程序总是假的。

这是我正在做的一些示例代码:

我的类全局变量,我尝试使用和不使用私有和使用和不使用静态修饰符:

private boolean cancelTimers;

在我的代码的某些部分,我这样做:

cancelTimers=true;

我的经纪人:

    hand=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if(cancelTimers==true){
                System.out.println("handler canceled");
                return;
            }else{
                System.out.println("handler done");
                super.handleMessage(msg);   
            }           
       }
    };

问题在于,对于我的处理程序,即使变量为true,cancelTimners总是为false,因为我在调用处理程序之前写入了它的值。

4 个答案:

答案 0 :(得分:2)

中删除私人
  private boolean cancelTimers;

并使cancelTimers全局

答案 1 :(得分:1)

使用static修饰符声明变量。

private static boolean cancelTimers = false;

如果您使用static修饰符声明字段,那么static字段的值将在该类的所有实例中相同。

为了更好地理解static修饰符的使用,您可以看到此Java doc

答案 2 :(得分:1)

做这样的事情:

public class A extends Activity  {


private boolean cancelTimers;

private Handler handler = new Handler() {

    public void handleMessage(android.os.Message msg) {
         if(cancelTimers==true){
            System.out.println("handler canceled");
            return;
        }else{
            System.out.println("handler done");
            super.handleMessage(msg);   
        }       

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout);


}

将变量声明为全局。

答案 3 :(得分:1)

做这样的事情

TextView content;
    private boolean cancelTimers=false;
    Handler hand;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        content = (TextView)findViewById(R.id.output);

        content.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                 Log.e("above  valuueeeee", ""+cancelTimers);
                cancelTimers=true;
                 Log.e("below valuueeeee", ""+cancelTimers);
            }
        });

        Log.e("valuueeeee", ""+cancelTimers);
        hand=new Handler(){
            @Override
            public void handleMessage(Message msg) {
                if(cancelTimers==true){
                   Log.e("messs","handler canceled");
                    return;
                }else{
                     Log.e("messs","handler done");
                    super.handleMessage(msg);   
                }           
           }
        };


    }