0

私はCamera2を使用してAPI> 20のデバイスのカメラプレビューを実装します。アンドロイド5.0.0でasus_t00jのエラーが発生しました。なぜそれが現れるのか分かりません。ヌルオブジェクトリファレンスでandroid.hardware.camera2.ICameraDeviceUserフィールドに書き込もうとしました

Fatal Exception: java.lang.NullPointerException: Attempt to write to field 'android.hardware.camera2.ICameraDeviceUser android.hardware.camera2.impl.CameraDeviceImpl.mRemoteDevice' on a null object reference 
    at android.hardware.camera2.impl.CameraDeviceImpl.close(CameraDeviceImpl.java:773) 
    at com.vyda.stream.screencast.CameraHelper.closeCamera(CameraHelper.java:410) 
    at com.vyda.stream.screencast.CameraHelper.stopCameraAndRemoveWindow(CameraHelper.java:150) 
    at com.vyda.stream.screencast.ScreencastService.endScreencasting(ScreencastService.java:307) 
    at com.vyda.stream.screencast.ScreencastService$8.onClick(ScreencastService.java:275) 
    at android.view.View.performClick(View.java:4756) 
    at android.view.View$PerformClick.run(View.java:19761) 
    at android.os.Handler.handleCallback(Handler.java:739) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5253) 
    at java.lang.reflect.Method.invoke(Method.java) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

CameraHelper :: closeCamera()

private void closeCamera() { 
     try { 
      cameraOpenCloseLock.acquire(); 
      if (null != captureSession) { 
       captureSession.close(); 
       captureSession = null; 
      } 
      if (null != cameraDevice) { 
       cameraDevice.close(); 
       cameraDevice = null; 
      } 
     } catch (InterruptedException e) { 
      throw new RuntimeException("Interrupted while trying to lock camera closing.", e); 
     } finally { 
      cameraOpenCloseLock.release(); 
     } 
    } 
+0

close()を呼び出すと、cameraDeviceは明らかにnullです。 – Egor

+0

cameraDeviceがnullの場合、closeを呼び出すことはできません。 – Michael

答えて

2

captureSession.close()は、基礎となるカメラオブジェクト(ではなく、あなたのcameraDeviceメンバーCameraHelper)、あなたのコードがcameraDevice.close()に到着したときにことを意味し、非同期であります破壊される。 captureSession.close()cameraDevice.close()の両方で、onClosed()コールバックを待つことになっています。

cameraDevice.close()の説明では、アクティブなセッションが閉じられるため、シナリオでcaptureSession.close()コールは必要ありません。

PSあなたが体験したことは、ASUSデバイスのCamera2 APIのバグの実装です。

+0

あなたの答えはThxです。よく聞こえますが、確認する必要があります。私はあなたに私の進歩について知らせます:) – Michael

関連する問題