当前位置: 首页 > 知识库问答 >
问题:

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

干子瑜
2023-03-14

我的应用程序相机预览使用textureview

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

Intent intent = getPackageManager().getLaunchIntentForPackage("kr.co.aaa.wifiapp");
startActivity(intent);
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
    mCamera.setPreviewCallback(null);
    mCamera.release();
    mCamera = null;
}

此时,调用OnSurfaceTextureAvailable

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
  try {  
       mCamera.setPreviewTexture(surfaceTexture);  //NPE
       mCamera.startPreview();
  } catch (IOException e) {
      e.printStackTrace();
  }
}

重新启动我的应用程序时,发生NullPointerException

我认为出现NPEonSurfaceTextureDestromedmcamera=null;

因为当我的应用程序重新启动时,mCamera状态为null调用OnSurfaceTextureAvailablemCamera.SetPreviewTexture(surfaceTexture)为null。

所以我尝试删除mcamera=null

但会出现不同的错误。

此错误Mcamera.SetPrevietExture(surfaceTexture)

如何解决这个问题?

多谢了。

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;
}

共有1个答案

廉博赡
2023-03-14

请检查类名和构造函数名

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

}
 类似资料:
  • 我已经更新到新的adt 可悲的是,做了一些改变,我找不到任何关于如何使用它们的信息。谈论ProGuard的官网链接(在Android网站中)仍然谈论旧的方式。 他们在“project.properties”上写下,取消注释下一行: 这不起作用,尝试导出时会出现以下错误: 有人能帮我吗?我以前从来没有改变过proguard.cfg文件,一切都是自动的。我很少做这样的事。 他们还添加了一个文件prog

  • 你好,我做了几天的研究和一些问题分析,但我现在不知道如何解决我的问题。 也许有人能帮忙...... 我正在使用Android设备的Jsch来访问我的raspberry pi,以便设置一些特定的命令。 我从jschshell命令开始,除了由于无限循环而无法关闭连接之外,一切都很好。 我试图切换到Exec,尤其是因为我只想发送几个命令,而不需要知道shell上发生了什么。 不管怎样...这是我的代码:

  • 验证DatePickerDialog上的日期时出现了IllegalArgumentException。下面是StackTrace: 和我的代码 我在创建对话框时没有问题,并且当对话框显示时,日期被正确初始化。 无论选择的日期是什么,都会引发IllegalArgumentException。 我一直在寻找答案,但所有类似的帖子都是关于创建对话框时出现的过度,而不是日期的验证。 你能帮我查查是怎么回事

  • 2.)AVD没有互联网问题(原因稍后解释)。 3.)与我的volley singleton类或请求队列无关(原因稍后解释)。 所以我想我在Volley/Request Future的用法上犯了某种错误。

  • 问题内容: 目前,我正在安装psycopg2以便在Eclipse中使用python工作。 我发现很多问题: 第一个问题不起作用,并显示以下消息 错误:找不到pg_config可执行文件。 固定于: 当我在项目中导入psycopg2时,我会观察: ImportError:dlopen(/Library/Frameworks/Python.framework/Versions/3.4/lib/pyth