2016-10-26 16 views
0

私はラスベリーアンドロイドでテストUSBカメラのプレビューを試します。が発生NullPointerExceptionヌルオブジェクトリファレンスで仮想メソッドを呼び出そうとした

まず、私のラズベリーパイはアームプロセッサーです。

とusbカメラで問題ないデバイスです。

私はNullPointerExceptionを発生確認後、

Log.d(TAG,"Camera is connected?"+camera);
結果はそうCamera is connected?null

ではnullチェックをしてみてください、私はraspberry piはそれが検出できないようです だと思います。

MainActivity.class

public class MainActivity extends Activity implements SurfaceHolder.Callback { 
    Camera camera; 
    SurfaceView surfaceView; 
    SurfaceHolder surfacehHolder; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    . 
    . 
    getWindow().setFormat(PixelFormat.UNKNOWN); 

    surfaceView = (SurfaceView)findViewById(R.id.surfaceView); 
    surfaceHolder = surfaceView.getHolder(); 
    surfaceHolder.addCallback(this); 
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 

    camera = Camera.open(); 
    camera.stopPreview(); 
    Camera.Parameters param = camera.getParameters(); 
    param.setRotation(90); 
    camera.setParameters(param); 

    try { 
     camera.setPreviewDisplay(surfaceHolder); 
     camera.startPreview(); 
    } catch { 
     return; 
    } 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
     refreshCamera(); 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     camera.stopPreview(); 
     camera.release(); 
     camera = null; 
    } 

    public void refreshCamera() { 
     if (surfaceHolder.getSurface() = null) { 
     return ; 
     } 
     try { 
      camera.stopPreview(); 
     } catch { 
     } 
    } 
} 

異なるデバイスでこのコードの成功作品。 (ないラズベリーPI) だけラズベリーPIデバイス、おそらく

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.hardware.Camera.stopPreview()' on a null object reference 
at kr.c004245.dom.camera_raspberry_preview.MainActivity.surfaceCreated(MainActivity.java:134) 
at android.view.SurfaceView.updateWindow(SurfaceView.java:583) 
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:177) 
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2063) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1115) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6023) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
at android.view.Choreographer.doFrame(Choreographer.java:606) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5488) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:746) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 

例外を発生し、ラズベリーPIアンドロイド異なるカメラが開きますか?ご存じの場合は 私のために助けてください

ありがとう。 Cameraため

答えて

1

javadocsは言う:

このクラスは、APIレベル21

私たちは、新しいアプリケーションのための新しいandroid.hardware.camera2 APIを使用することをお勧めしますで廃止されました。

そしてopen()のjavadocは言う:

は、デバイス上で最初に後ろ向きカメラにアクセスするために新しいCameraオブジェクトを作成します。 デバイスに背面カメラがない場合、nullが返されます。

だから可能な説明がいくつかあります:

  • お使いのデバイスは、後ろ向きカメラを持っていません。
  • お使いの端末の背面カメラは、Androidが見つからない、または使用できない程度に、あなたのRaspberry PiのOSレベルで何らかの形で誤って設定されています。
  • この廃止予定のAPIは、Raspberry Pi Androidに正しく実装されていません。

javadocの言うことを行い、camera2 APIを使用するようにコードすることをお勧めします。その後のデバッグに進みます。です。

あなたはcamera2 APIを使用することができない場合は、あなたが選択したカメラを開くためにopen(ID)を呼び出して、使用するカメラを把握するgetNumberOfCamerasgetCameraInfo(...)を使用する必要があります。 (実際には、単に呼び出すとgetNumberOfCamerasを表示することは有用であろう。)いくつかのより多くの掘削後

UPDATE

、私の答えは、Androidラズベリーパイのカメラのサポートはかなり荒れているということだと思います。たとえば:

+0

おかげで、私はandroid.hardware.camera'はAPIレベル21以上である '使用を知って、ラズベリーパイアンドロイドは' android.hardware.camera'を使用することはありませんでしょうか? – chohyunwook

+0

私はあなたの質問を理解していません。 –

+0

あなたは 'android.hardware.camera2' APIが正しいと試してみますか? – chohyunwook

関連する問題

 関連する問題