Java Android:布尔值不正确-奇怪
我正在创建一个surfaceView类来显示来自摄像机的图像。我花了一些时间让它工作,但我添加了一些祝酒词、对话框和一些布尔变量,以便在AnnotateSurface类和Activity类中调试它。我在一个if语句中使用了其中的一个来运行线程,以便在图像为真时将其绘制到曲面上(这就是阻止它工作的原因) 我已经让它工作了,但只是在我发现布尔值bitmapState被重置为false之后。它被初始化为false,但在getBitmap方法中,我将其更改为true。这是编辑该布尔变量的唯一方法 setBitmap方法中的toast显示为“true”,但当我从activity类调用getStuff方法时,它显示为false,并且当我使用以下命令时,run方法中的if语句也将不起作用:Java Android:布尔值不正确-奇怪,java,android,bitmap,boolean,surfaceview,Java,Android,Bitmap,Boolean,Surfaceview,我正在创建一个surfaceView类来显示来自摄像机的图像。我花了一些时间让它工作,但我添加了一些祝酒词、对话框和一些布尔变量,以便在AnnotateSurface类和Activity类中调试它。我在一个if语句中使用了其中的一个来运行线程,以便在图像为真时将其绘制到曲面上(这就是阻止它工作的原因) 我已经让它工作了,但只是在我发现布尔值bitmapState被重置为false之后。它被初始化为false,但在getBitmap方法中,我将其更改为true。这是编辑该布尔变量的唯一方法 set
if (surfaceState == bitmapState == true) {
drawSomething(canvas);
}
这确实令人困惑,因为所有其他布尔值的行为都是正确的。如果有人有什么见解的话,我很想听听
public class AnnotateSurface extends SurfaceView implements Callback, Runnable {
// create a holder to manage the surface of the view
SurfaceHolder ourHolder;
// Create a thread
Thread ourThread = null;
// Create a boolean to determine when to stop the animation
boolean isRunning = false;
boolean surfaceState = false;
boolean bitmapState = false;
public static Bitmap bmpIm = null;
Context c;
Canvas canvas;
int ws, hs;
public AnnotateSurface(Context context) {...
}
public AnnotateSurface(Context context, AttributeSet attrs) {...
}
public AnnotateSurface(Context context, AttributeSet attrs, int defStyle) {...
}
// create a method to pause the thread
public void pause() {...
}
public void resume() {...
}
// create a method to resume the thread
public void setBitmap(Bitmap b) {
bmpIm = b;
// bmpIm = AnnotateImage.bmpAnnotate;
// isRunning = true;
bitmapState = true;
Toast toast = new Toast(c);
Toast.makeText(c, Boolean.toString(bitmapState), Toast.LENGTH_LONG)
.show();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {...
}
@Override
public void surfaceCreated(SurfaceHolder holder) {...
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
surfaceState = false;
}
// @Override
public void drawSomething(Canvas canvas) {...
}
public String getstuff() {
String Data = "not drawing" + Boolean.toString(this.bitmapState)
+ Boolean.toString(surfaceState) + Boolean.toString(isRunning)
+ Integer.toString(ws) + Integer.toString(hs);
return Data;
}
public Bitmap getstuffImage() {...
}
@Override
public void run() {...
}
}
我在过去遇到过布尔和“如果”语句的问题,最好的解决方法是更明确地对待它们,例如:
if (surfaceState == bitmapState && bitmapState == true) {
drawSomething(canvas);
}
干杯迈克嗯,变量本身不会改变,所以有其他的事情发生了。。。我注意到,
bitmapState
不是私有的,您是否在其他类中更改它?也张贴你在哪里以及如何制作你的祝酒词。最后,这个:Toast Toast=newtoast(c)
从未使用过…您所指的Toast可以删除。这里没有使用,我声明了,但从未使用过。下面的祝酒词是真的。我没有在任何其他类中编辑它,该活动没有布尔变量。这是活动课的祝酒词。。。。。字符串tx=ourSurfaceView.getstuff();吐司吐司=新吐司(本);Toast.makeText(this,tx,Toast.LENGTH_LONG).show();我意识到我也加倍努力在那里宣布祝酒词。谢谢迈克,我以后会采用这种方法,但我认为这里的布尔变量本身造成了问题。if(surfaceState&&bitmapState)
同样有效。永远不需要显式地将布尔值与true进行比较。是否考虑过为布尔值使用某种类型的值保持类?我在调用的setBitmap方法之外创建了一个方法,以将值更改为true。这也不管用。这让我非常恼火,我已经尝试了很多变体。来吧,伙计们,肯定有一些android/java大师可能有答案??
if (surfaceState == bitmapState && bitmapState == true) {
drawSomething(canvas);
}