gpt4 book ai didi

java - 发生 NullPointerException 尝试在空对象引用上调用虚方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:23 24 4
gpt4 key购买 nike

我尝试在 raspberry android 上测试 usb 相机预览。

首先,我的树莓派是arm处理器。

USB 摄像头不是问题设备。

在我检查发生 NullPointerException 之后,尝试空检查

Log.d(TAG,"Camera is connected?"+camera);
结果是 Camera is connected?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 {
}
}
}

此代码在不同设备上成功运行。 (不是树莓派)但只有树莓派设备,出现异常

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)

也许,raspberry pi android 不同的摄像头打开?如果你知道的话。请给我建议

谢谢。

最佳答案

javadocs对于 Camera 说:

This class was deprecated in API level 21.

We recommend using the new android.hardware.camera2 API for new applications.

open() 的 javadoc 说:

Creates a new Camera object to access the first back-facing camera on the device. If the device does not have a back-facing camera, this returns null.

所以有很多可能的解释:

  • 您的设备没有后置摄像头。
  • 您设备的后置摄像头在 Raspberry Pi 上的操作系统级别配置错误...以至于 Android 找不到或无法使用它。
  • 此已弃用的 API 未在 Raspberry Pi Android 上正确实现。

我建议您按照 javadoc 的说明进行操作,并重新编码以使用 camera2 API。然后继续调试那个

如果您不能使用camera2 API,那么您可能需要使用getNumberOfCamerasgetCameraInfo(...) 找出要使用的相机,然后调用 open(ID) 打开选定的相机。 (实际上,调用并显示 getNumberOfCameras 会很有帮助。)

更新

经过更多挖掘,我认为答案是 Android Raspberry Pi 上的相机支持非常粗糙。例如:

关于java - 发生 NullPointerException 尝试在空对象引用上调用虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com