0

Camera オブジェクトの jpeg PictureCallback 内でメンバー変数を設定しonClick()、特定のボタンが押されたときにそれらをコールバック メソッドで使用しようとしています。このボタンは、takePicture()が呼び出されるまで表示されません。ただし、ボタンが押されるたびに、PictureCallback に設定した値はnullになります。

したがって、私の計算では、 Callback は の後に呼び出されませんtakePicture()。ブレークポイントを配置しましたが、呼び出されるポイントが見つからないようです。 aNullPointerExceptionが最初にスローされます。

何か案は?

ここにいくつかのコードがあります(また、編集していただきありがとうございます、ヒット)

    jpeg = new Camera.PictureCallback() {

        public void onPictureTaken(byte[] data, Camera camera) {
            FileOutputStream out = null;
            try {
                //create album
                String root = Environment.getExternalStorageDirectory().toString();
                myDir = new File(root + "/My Album");    
                myDir.mkdirs();

                //create naming mechanism
                Calendar c = Calendar.getInstance();
                Date d = c.getTime();
                String date = d.toGMTString().replace(" ", "");

                fname = date + ".png";
                File file = new File (myDir, fname);

                //create output stream to handle putting images to file
                out = new FileOutputStream(file);

                //get images from stream/resource - also create new bitmap to save results to
                Bitmap image = BitmapFactory.decodeByteArray(data, 0, data.length);

                //this resizes the frame to fit the photo because otherwise they are misaligned
                Bitmap tFrame = frameSelected;
                Bitmap frame = Bitmap.createScaledBitmap(tFrame, 640, 480, false);
                Bitmap completed = Bitmap.createBitmap(image.getWidth(), image.getHeight(), image.getConfig());

                //create a canvas for creating the new bitmap, and paint to use with it
                Canvas canvas = new Canvas(completed);
                Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);

                //add bitmaps to canvas
                canvas.drawBitmap(image, new Matrix(), paint); //image from camera
                canvas.drawBitmap(frame, new Matrix(), paint); //frame to be added

                //compress new bitmap to a stream
                ByteArrayOutputStream stream = new ByteArrayOutputStream();
                completed.compress(Bitmap.CompressFormat.PNG, 100, stream);
                byte[] byteArray = stream.toByteArray();

                //add stream to file
                out.write(byteArray);
                out.close();
                Log.d("CALLBACK", "onPictureTaken - wrote bytes: " + data.length);
            } catch (Exception e) {
                e.printStackTrace();
            }
            finally {
            }
            Log.d("CALLBACK", "onPictureTaken - jpeg");
        }
    };

public void onClick(View v) {
    //take photo

    if (v.getId() == R.id.take_photo_button){
        camera.takePicture(shutter, raw, null, jpeg);
        camera.stopPreview();

        s.setVisibility(View.VISIBLE);
        d.setVisibility(View.VISIBLE);
        b.setVisibility(View.INVISIBLE);
        framesSpinner.setVisibility(View.INVISIBLE);

    }
    else if (v.getId() == R.id.save_photo_button){
        Toast.makeText(this, "Photo saved to My Album", Toast.LENGTH_LONG).show();

        s.setVisibility(View.INVISIBLE);
        d.setVisibility(View.INVISIBLE);
        b.setVisibility(View.VISIBLE);
        framesSpinner.setVisibility(View.VISIBLE);

        camera.startPreview();

    }
    else if (v.getId() == R.id.delete_photo_button){
        File f = new File(myDir, fname);
        boolean isDeleted = f.delete();
        if (isDeleted){
            Toast.makeText(this, "Photo deleted", Toast.LENGTH_LONG).show();
        }
        else{
            Toast.makeText(this, "Error in deleting photo, photo not deleted", Toast.LENGTH_LONG).show();
        }
        s.setVisibility(View.INVISIBLE);
        d.setVisibility(View.INVISIBLE);
        b.setVisibility(View.VISIBLE);
        framesSpinner.setVisibility(View.VISIBLE);

        camera.startPreview();
    }
}

Delete キーが押されたときのスタック トレース:

09-12 14:29:58.935: E/AndroidRuntime(25412): 致命的な例外: メイン 09-12 14:29:58.935: E/AndroidRuntime(25412): java.lang.NullPointerException 09-12 14:29:58.935: E/AndroidRuntime(25412): java.io.File.(File.java:150) 09-12 14:29:58.935: E/AndroidRuntime(25412): java.io.File.(File.java:124) ) 09-12 14:29:58.935: E/AndroidRuntime(25412): com.example.cameraoverlay.CameraActivity.onClick(CameraActivity.java:228) 09-12 14:29:58.935: E/AndroidRuntime(25412): android.view.View.performClick(View.java:3644) 09-12 14:29:58.935: E/AndroidRuntime(25412): android.view.View$PerformClick.run(View.java:14313) 09- 12 14:29:58.935: E/AndroidRuntime(25412): android.os.Handler.handleCallback(Handler.java:605) 09-12 14:29:58.935: E/AndroidRuntime(25412): android.os で。 Handler.dispatchMessage(Handler.java:92) 09-12 14:29:58.935: E/AndroidRuntime(25412): android.os.Looper.loop(Looper.java:137) 09-12 14:29:58.935: E/AndroidRuntime(25412): at android.app.ActivityThread.main(ActivityThread.java:4517) 09-12 14:29:58.935: E/AndroidRuntime(25412): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 09-12 14:29 で:58.935: E/AndroidRuntime(25412): java.lang.reflect.Method.invoke(Method.java:511) 09-12 14:29:58.935: E/AndroidRuntime(25412): com.android.internal. os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 09-12 14:29:58.935: E/AndroidRuntime(25412): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 09 -12 14:29:58.935: E/AndroidRuntime(25412): dalvik.system.NativeStart.main(ネイティブ メソッド) で137) 09-12 14:29:58.935: E/AndroidRuntime(25412): android.app.ActivityThread.main(ActivityThread.java:4517) 09-12 14:29:58.935: E/AndroidRuntime(25412): at java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 09-12 14:29:58.935: E/AndroidRuntime(25412): java.lang.reflect.Method.invoke(Method.java:511) 09-12 14 :29:58.935: E/AndroidRuntime(25412): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 09-12 14:29:58.935: E/AndroidRuntime(25412): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 09-12 14:29:58.935: E/AndroidRuntime(25412): dalvik.system.NativeStart.main(ネイティブ メソッド) で137) 09-12 14:29:58.935: E/AndroidRuntime(25412): android.app.ActivityThread.main(ActivityThread.java:4517) 09-12 14:29:58.935: E/AndroidRuntime(25412): at java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 09-12 14:29:58.935: E/AndroidRuntime(25412): java.lang.reflect.Method.invoke(Method.java:511) 09-12 14 :29:58.935: E/AndroidRuntime(25412): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 09-12 14:29:58.935: E/AndroidRuntime(25412): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 09-12 14:29:58.935: E/AndroidRuntime(25412): dalvik.system.NativeStart.main(ネイティブ メソッド) でMethod.invokeNative(ネイティブ メソッド) 09-12 14:29:58.935: E/AndroidRuntime(25412): java.lang.reflect.Method.invoke(Method.java:511) 09-12 14:29:58.935: E /AndroidRuntime(25412): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 09-12 14:29:58.935: E/AndroidRuntime(25412): com.android.internal. os.ZygoteInit.main(ZygoteInit.java:760) 09-12 14:29:58.935: E/AndroidRuntime(25412): dalvik.system.NativeStart.main(ネイティブ メソッド) でMethod.invokeNative(ネイティブ メソッド) 09-12 14:29:58.935: E/AndroidRuntime(25412): java.lang.reflect.Method.invoke(Method.java:511) 09-12 14:29:58.935: E /AndroidRuntime(25412): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 09-12 14:29:58.935: E/AndroidRuntime(25412): com.android.internal. os.ZygoteInit.main(ZygoteInit.java:760) 09-12 14:29:58.935: E/AndroidRuntime(25412): dalvik.system.NativeStart.main(ネイティブ メソッド) でメイン (ZygoteInit.java:760) 09-12 14:29:58.935: E/AndroidRuntime (25412): dalvik.system.NativeStart.main (ネイティブ メソッド) でメイン (ZygoteInit.java:760) 09-12 14:29:58.935: E/AndroidRuntime (25412): dalvik.system.NativeStart.main (ネイティブ メソッド) で

4

0 に答える 0