大佬教程收集整理的这篇文章主要介绍了android – surfaceView.getHolder没有返回SurfaceHolder,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
谢谢.
package com.tecmark; import java.io.IOException; import android.app.Activity; import android.graphics.PixelFormat; import android.hardware.Camera; import android.os.bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.Window; import android.view.WindowManager; public class cameraView extends Activity implements SurfaceHolder.CallBACk{ SurfaceView mSurfaceView; SurfaceHolder mSurfaceHolder; Camera mCamera; Boolean mPreviewRunning; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); getWindow().setFormat(PixelFormat.TRANSLUCENT); requestWindowFeature(Window.FEATURE_NO_titlE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); //setContentView(R.layout.camera_surfacE); mSurfaceView = (SurfaceView) findViewById(R.id.surface_camera); Log.i("surfaceholder = ","about to get surface holder"); try{ mSurfaceHolder = mSurfaceView.getHolder(); }catch(Exception E){ e.printStackTrace(); } Log.i("surfaceholder = ",""+mSurfaceHolder.to@R_696_10495@ng()); mSurfaceHolder.addCallBACk(this); mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); setContentView(R.layout.camera_surfacE); surfaceCreated(mSurfaceHolder); } @Override public void surfaceChanged(SurfaceHolder holder,int format,int w,int h) { if (mPreviewRunning) { mCamera.stopPreview(); } Camera.Parameters p = mCamera.getParameters(); p.setPreviewSize(w,h); mCamera.setParameters(p); try { mCamera.setPreviewDisplay(holder); } catch (Exception E) { e.printStackTrace(); } mCamera.startPreview(); mPreviewRunning = true; } @Override public void surfaceCreated(SurfaceHolder holder) { try{ Log.i("camera ","about to open camera"); mCamera = Camera.open(); Log.i("camera "," camera opened"); mCamera.getParameters(); mCamera.setPreviewDisplay(holder); mCamera.startPreview(); } catch (IOException E) { e.printStackTrace(); } Log.i("camera ","ok"); } @Override public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mPreviewRunning = false; mCamera.release(); } }//end of activity 01-31 15:29:17.773: WARN/System.err(9144): java.lang.NullPointerException 01-31 15:29:17.778: WARN/System.err(9144): at com.tecmark.cameraView.onCreate(cameraView.java:42) 01-31 15:29:17.778: WARN/System.err(9144): at android.app.instrumentation.callActivityOnCreate(instrumentation.java:1047) 01-31 15:29:17.778: WARN/System.err(9144): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 01-31 15:29:17.783: WARN/System.err(9144): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 01-31 15:29:17.783: WARN/System.err(9144): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 01-31 15:29:17.783: WARN/System.err(9144): at android.app.ActivityThread$H.handlemessage(ActivityThread.java:1863) 01-31 15:29:17.783: WARN/System.err(9144): at android.os.Handler.dispatchmessage(Handler.java:99) 01-31 15:29:17.783: WARN/System.err(9144): at android.os.Looper.loop(Looper.java:123) 01-31 15:29:17.783: WARN/System.err(9144): at android.app.ActivityThread.main(ActivityThread.java:4363) 01-31 15:29:17.783: WARN/System.err(9144): at java.lang.reflect.Method.invokeNative(Native Method) 01-31 15:29:17.788: WARN/System.err(9144): at java.lang.reflect.Method.invoke(Method.java:521) 01-31 15:29:17.788: WARN/System.err(9144): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-31 15:29:17.788: WARN/System.err(9144): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 01-31 15:29:17.788: WARN/System.err(9144): at dalvik.system.NativeStart.main(Native Method) 01-31 15:29:17.793: DEBUG/AndroidRuntime(9144): ShutTing down VM 01-31 15:29:17.793: WARN/dalvikvm(9144): threadid=3: thread exiTing with uncaught exception (group=0x4001b180) 01-31 15:29:17.793: ERROR/AndroidRuntime(9144): Uncaught handler: thread main exiTing due to uncaught exception 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): java.lang.RuntimeException: Unable to start activity ComponenTinfo{Com.tecmark/com.tecmark.cameraView}: java.lang.NullPointerException 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at android.app.ActivityThread$H.handlemessage(ActivityThread.java:1863) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at android.os.Handler.dispatchmessage(Handler.java:99) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at android.os.Looper.loop(Looper.java:123) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at android.app.ActivityThread.main(ActivityThread.java:4363) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at java.lang.reflect.Method.invokeNative(Native Method) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at java.lang.reflect.Method.invoke(Method.java:521) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at dalvik.system.NativeStart.main(Native Method) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): Caused by: java.lang.NullPointerException 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at com.tecmark.cameraView.onCreate(cameraView.java:47) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at android.app.instrumentation.callActivityOnCreate(instrumentation.java:1047) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 01-31 15:29:17.803: ERROR/AndroidRuntime(9144): ... 11 more
我认为您遇到的根本问题是视图/活动生命周期的某些部分需要在开始处理surfaceView并开始使用它之前运行它们的过程.
我不确定这一点,但是这里有各种各样的地方的故障,我在一个增强现实应用程序中处理各种相机和表面视图的东西:
onCreate() { // just set content view. do nothing with the camera or surfaceView yet setContentView(R.layout.main); } onResume() { // open camera mCamera = Camera.open(); // init surface view sv = (SurfaceView)this.findViewById(R.id.SurfaceView01); mHolder = sv.getHolder(); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mHolder.setSizeFromLayout(); mHolder.addCallBACk(this); } surfaceChanged(SurfaceHolder holder,int h) { mCamera.setPreviewDisplay(holder); // set any cam params you need... mCamera.startPreview(); }
尝试重构代码以执行类似操作.我的眼睛变得闷闷不乐试图从你的来源算出NPE的发生地点,但我认为有一些问题是:
>你似乎试图在调用setContentView()之前尝试引用surfaceview@H_618_19@>你直接调用surfaceCreated方法,而不是让它通过回调调用.
希望有所帮助.我们还能解决这个问题!
以上是大佬教程为你收集整理的android – surfaceView.getHolder没有返回SurfaceHolder全部内容,希望文章能够帮你解决android – surfaceView.getHolder没有返回SurfaceHolder所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。