我的班上有一个全局布尔变量,而且我的班上也有一个处理程序。我希望处理程序只在类的变量为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,因为我在调用处理程序之前写入了它的值。
答案 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);
}
}
};
}