Android 无法访问处理程序中的类变量吗?

Android 无法访问处理程序中的类变量吗?,android,handler,android-handler,Android,Handler,Android Handler,我的类上有一个全局布尔变量,我的类上也有一个处理程序。我希望处理程序只在类的变量为true时执行一些代码,但它不起作用,因为对于处理程序,该变量总是false。我不明白为什么,因为这个值有时是真的,所以我用变量值的日志检查它,但对于处理程序来说总是假的 这是我正在做的一些示例代码: 我的类全局变量,我尝试使用和不使用private以及使用和不使用static修饰符: private boolean cancelTimers; 在我的代码的某些部分中,我这样做: cancelTimers=tru

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

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

我的类全局变量,我尝试使用和不使用private以及使用和不使用static修饰符:

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);   
            }           
       }
    };
问题是,对于我的处理程序,cancelTimners始终为false,即使变量为true,因为我在调用处理程序之前写入了他的值。

  private boolean cancelTimers;
并将取消计时器设为全局

  private boolean cancelTimers;
并使cancelTimers全局

使用静态修饰符声明变量

private static boolean cancelTimers = false;
如果使用static修饰符声明字段,则静态字段的值在类的所有实例中都是相同的

为了更好地理解static修饰符的用法,您可以查看以下Java。

使用static修饰符声明变量

private static boolean cancelTimers = false;
如果使用static修饰符声明字段,则静态字段的值在类的所有实例中都是相同的


为了更好地理解static修饰符的用法,您可以查看以下Java。

制作如下内容:

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);


}

将变量声明为全局变量。

进行如下操作:

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);


}
将变量声明为全局变量。

执行以下操作

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);   
                }           
           }
        };


    }
做这样的事

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);   
                }           
           }
        };


    }

不可能理解这段代码是怎么回事一个可能的解决方案在哪里将变量声明为globalBoolean在哪里更改值?处理程序不相关,因为完全可以在处理程序中访问您的成员变量。该变量已经是全局变量,无法工作无法理解此代码段的情况可能的解决方案将变量声明为全局变量的位置布尔值在哪里更改?处理程序不相关,因为完全可以在处理程序中访问您的成员变量。该变量已为全局变量且不工作该变量已为全局变量且不工作。此外,我还尝试使用静态而非workspost更相关的代码…对于给定的代码,很难找到问题所在。问题是,对于我的处理程序,cancelTimners始终为false,即使变量为true,因为我在调用处理程序之前写入了他的值。我添加了一些关于这个问题的解释和代码。这个变量已经是全局变量了,不起作用。此外,我还尝试使用静态而非workspost更相关的代码…对于给定的代码,很难找到问题所在。问题是,对于我的处理程序,cancelTimners始终为false,即使变量为true,因为我在调用处理程序之前写入了他的值。我添加了一些关于这个问题的解释和代码。这个变量已经是全局变量了,不起作用。我尝试删除private,但仍然无法工作该变量已为全局变量,无法工作。我试着删除私人文件,但仍然不起作用