0

Android開発者チュートリアルに基づいたシンプルなカメラアプリを開発していますが、実行に問題があります。

これが私のLogCatの印刷物です。

ここに画像の説明を入力

NullPointerException を追跡して、CameraPreview の 30 行目にあることを確認したので、CameraPreview のコードを以下に示します。私はJavaでコードを書くことができ、NullPointerがまだ作成されていない何かがあるときであることを知っていますが、私が知る限り、作成されています。

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback{
private SurfaceHolder mHolder;
private Camera mCamera;
private static final String TAG = "Preview";

@SuppressWarnings("deprecation")
public CameraPreview(Context context, Camera camera){
    super(context);
    mCamera = camera;

    //Install callback to get notifications from the app
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //deprecated but required for Android Version 3.0 and under
}

public void surfaceCreated(SurfaceHolder holder) {
    //Surface been created now need to tell app where to draw PREVIEW
            try{
                mCamera.setPreviewDisplay(holder);
                mCamera.startPreview();
            }
            catch(IOException e){
                Log.d(TAG, "Camera preview error: " + e.getMessage());
            }

}

30行目はコードスニペットです -mCamera.setPreviewDisplay(holder);

私が言えることは、「グローバル」変数に mCamera のインスタンスがあるということですprivate Camera mCamera

誰でもアイデアはありますか?申し訳ありませんが、できる限りフォーマットされた長い質問です。

ありがとう、ダン

PSこのクラスには他にも必要なメソッドがあることを知っていますが、これは単なる「問題の断片」です。

4

4 に答える 4

1
public CameraPreview(Context context, Camera camera){
    super(context);
    mCamera = camera;

nullとしてcamera渡されているようです。CameraPreview


マニフェストに次のものがあることを確認してください。

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />  
<uses-feature android:name="android.hardware.camera.autofocus" /> 

また、あなたのgetCameraInstance()方法は何ですか?

于 2012-08-01T11:25:05.417 に答える
1

どこでCameraPreview作成されますか?

のように見えnew CameraPreview(context, null)ます。

-CameraでCameraPreviewはないことを確認する必要があります。null

于 2012-08-01T11:23:39.487 に答える
0

Camera android.hardware.Camera.open()アクティビティを開始するときにカメラを初期化するために使用します。

于 2012-08-01T11:26:25.300 に答える
-1

mCamera = カメラ。

この行で、「カメラ」オブジェクトがnullになる可能性があります....最初に確認してください...のように

もし(カメラ==ヌル){

Log.e("カメラ","私のカメラは null です...");

}

これを試してください....この方法で、nullPointerが発生する正確な場所を見つけることができます...

于 2012-08-01T11:27:42.407 に答える