使用Camera TextureView时,在android上出现nullpointerExceptipn

使用Camera TextureView时,在android上出现nullpointerExceptipn,android,textureview,Android,Textureview,使用TextureView进行我的应用程序摄像头预览 现在情况,, 在我的应用程序中单击按钮时启动wifiapp Intent intent = getPackageManager().getLaunchIntentForPackage("kr.co.aaa.wifiapp"); startActivity(intent); 此时,在surfacetexturedemployed上调用,onPause @Override public boolean onSurfaceTextureDestr

使用
TextureView
进行我的应用程序摄像头预览

现在情况,, 在我的应用程序中单击
按钮时
启动wifiapp

Intent intent = getPackageManager().getLaunchIntentForPackage("kr.co.aaa.wifiapp");
startActivity(intent);
此时,在surfacetexturedemployed上调用
onPause

@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
    mCamera.setPreviewCallback(null);
    mCamera.release();
    mCamera = null;
}
在wifiapp中,单击后退
按钮
,重新启动我的应用程序

此时,在SurfaceTextureAvailable上调用

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
  try {  
       mCamera.setPreviewTexture(surfaceTexture);  //NPE
       mCamera.startPreview();
  } catch (IOException e) {
      e.printStackTrace();
  }
}
重新启动我的应用程序时,出现NullPointerException

java.lang.NullPointerException:尝试调用虚拟方法“void” android.hardware.Camera.setPreviewTexture(android.graphics.SurfaceTexture)' 关于空对象引用 在kr.co.iosystem.blackeyeonandroid.video.CameratextureReview.onSurfaceTextureAvailable上(CameratextureReview.java:82) 在android.view.TextureView.getHardwareLayer(TextureView.java:368) 在android.view.view.updateDisplayListIfDirty(view.java:15157)上 在android.view.view.draw(view.java:15954) 位于android.view.ViewGroup.drawChild(ViewGroup.java:3609) 位于android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 在android.view.view.draw(view.java:16187) 在android.view.view.updateDisplayListIfDirty(view.java:15180)上 在android.view.view.draw(view.java:15954) 位于android.view.ViewGroup.drawChild(ViewGroup.java:3609) 位于android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 在android.view.view.updateDisplayListIfDirty(view.java:15175)上 在android.view.view.draw(view.java:15954) 位于android.view.ViewGroup.drawChild(ViewGroup.java:3609) 位于android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 在android.view.view.draw(view.java:16187) 在android.view.view.updateDisplayListIfDirty(view.java:15180)上 在android.view.view.draw(view.java:15954) 位于android.view.ViewGroup.drawChild(ViewGroup.java:3609) 位于android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 在android.view.view.updateDisplayListIfDirty(view.java:15175)上 在android.view.view.draw(view.java:15954) 位于android.view.ViewGroup.drawChild(ViewGroup.java:3609) 位于android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 在android.view.view.updateDisplayListIfDirty(view.java:15175)上 在android.view.view.draw(view.java:15954) 位于android.view.ViewGroup.drawChild(ViewGroup.java:3609) 位于android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 在android.view.view.draw(view.java:16187) 在com.android.internal.policy.PhoneWindow$DecorView.draw上(PhoneWindow.java:2690) 在android.view.view.updateDisplayListIfDirty(view.java:15180)上 在android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:282)中 在android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:288)中 位于android.view.ThreadedRenderer.draw(ThreadedRenderer.java:323) 在android.view.ViewRootImpl.draw(ViewRootImpl.java:2609) 在android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2428) 在android.view.ViewRootImpl.performTraversals上(ViewRootImpl.java:2061) 位于android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 在android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6007) 在android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 位于android.view.Choreographer.doCallbacks(Choreographer.java:670) 位于android.view.Choreographer.doFrame(Choreographer.java:606) 在android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)中 位于android.os.Handler.handleCallback(Handler.java:739) 位于android.os.Handler.dispatchMessage(Handler.java:95) 位于android.os.Looper.loop(Looper.java:148) 位于android.app.ActivityThread.main(ActivityThread.java:5415) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:745)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:635)

我认为在surfacetexturedemployed上出现NPE
onsurfacetexturedemployed
mCamera=null

因为当我的应用程序重新启动时,mCamera状态为null call
onSurfaceTextureAvailable
mCamera.setPreviewTexture(surfaceTexture)
为null

所以我尝试删除
mCamera=null

但会出现不同的错误

java.lang.RuntimeException:摄影机在 调用了Camera.release() 在android.hardware.Camera.setPreviewTexture(本机方法) 在kr.co.iosystem.blackeyeonandroid.video.CameratextureReview.onSurfaceTextureAvailable上(CameratextureReview.java:82) 在android.view.TextureView.getHardwareLayer(TextureView.java:368) 在android.view.view.updateDisplayListIfDirty(view.java:15157)上 在android.view.view.draw(view.java:15954) 位于android.view.ViewGroup.drawChild(ViewGroup.java:3609) 位于android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 在android.view.view.draw(view.java:16187) 在android.view.view.updateDisplayListIfDirty(view.java:15180)上 在android.view.view.draw(view.java:15954) 位于android.view.ViewGroup.drawChild(ViewGroup.java:3609) 位于android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 在android.view.view.updateDisplayListIfDirty(view.java:15175)上 在android.view.view.draw(view.java:15954) 位于android.view.ViewGroup.drawChild(ViewGroup.java:3609) 位于android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 在android.view.view.draw(view.java:16187) 在android.view.view.updateDisplayListIfDirty(view.java:15180)上 在android.view.view.draw(view.java:15954) 位于android.view.ViewGroup.drawChild(ViewGroup.java:3609) 位于android.view.ViewGroup.dispatchDraw(ViewGroup.java:3399) 在android.view.view.updateDisplayListIfDirty(view.java:15175)上 在安卓。
public class CameraTexture extends TextureView implement TextureView.SurfaceTextureListener {
  private Camera mCamera;
  private TextureView mTextureView;

  public CameraTexture(Context context, LiveCamera liveCamera) {
    super(context);

    mCamera = liveCamera.camera;

    mTextureVeiw = (TextureView) activity.findViewById(R.id.live);
    mTextureView.setSurfaceTextureListener(this);
 }

 @Override 
 public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {

   try {
      mCamera.setPreviewTexture(surfaceTexture);
      mCamera.startPreview();
   } catch (IOException e) {
      e.printStackTrace();
   } 
 }

 @Override 
 public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int i, int i2) {
 }

 @Override
 public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
       mCamera.setPreviewCallback(null);
       mCamera.release();
       mCamera = null; // if delete this line, occur Camera is being used after Camera.release() was called  error
 }

 @Override
 public void onSurfaceTextureUpdated(SurfaceTexture surfaceTexture) {
    Bitmap bitmap = mTextureView.getBitmap();

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();

    int[] pixels = new int[bitmap.getHeight() * bitmap.getWidth()];
    bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
 }
 }


public class LiveCamera {
   public Camera camera;
}
public class CameraTexture extends TextureView implement TextureView.SurfaceTextureListener {
  private Camera mCamera;
  private TextureView mTextureView;

  public CameraTexture(Context context, LiveCamera liveCamera) {
    super(context);

    mCamera = liveCamera.camera;

    mTextureVeiw = (TextureView) activity.findViewById(R.id.live);
    mTextureView.setSurfaceTextureListener(this);
 }

//your remain code

}