Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:布尔值不正确-奇怪_Java_Android_Bitmap_Boolean_Surfaceview - Fatal编程技术网

Java Android:布尔值不正确-奇怪

Java Android:布尔值不正确-奇怪,java,android,bitmap,boolean,surfaceview,Java,Android,Bitmap,Boolean,Surfaceview,我正在创建一个surfaceView类来显示来自摄像机的图像。我花了一些时间让它工作,但我添加了一些祝酒词、对话框和一些布尔变量,以便在AnnotateSurface类和Activity类中调试它。我在一个if语句中使用了其中的一个来运行线程,以便在图像为真时将其绘制到曲面上(这就是阻止它工作的原因) 我已经让它工作了,但只是在我发现布尔值bitmapState被重置为false之后。它被初始化为false,但在getBitmap方法中,我将其更改为true。这是编辑该布尔变量的唯一方法 set

我正在创建一个surfaceView类来显示来自摄像机的图像。我花了一些时间让它工作,但我添加了一些祝酒词、对话框和一些布尔变量,以便在AnnotateSurface类和Activity类中调试它。我在一个if语句中使用了其中的一个来运行线程,以便在图像为真时将其绘制到曲面上(这就是阻止它工作的原因)

我已经让它工作了,但只是在我发现布尔值bitmapState被重置为false之后。它被初始化为false,但在getBitmap方法中,我将其更改为true。这是编辑该布尔变量的唯一方法

setBitmap方法中的toast显示为“true”,但当我从activity类调用getStuff方法时,它显示为false,并且当我使用以下命令时,run方法中的if语句也将不起作用:

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