I have this user camera activity in my application that works fine, but when I press the home button during the cameraโs action and then return to the application, it crashes and the log code says that there was a null pointer exception when creating kind of surface. This installation method is called onResume:
public void setup() { preview = new CameraPreview(this); ((FrameLayout) findViewById(R.id.camera_preview)).addView(preview); head=(ImageView)findViewById(R.id.head); head.setX((float)(Shared.screenWidth/5*1.8)); head.setY((float)(Shared.screenHeight*0.03)); LayoutParams params = (LayoutParams) head.getLayoutParams(); params.width = (int)((Shared.screenWidth/5*3.2)-(head.getX())); params.height=(int)((Shared.screenHeight/3.8)-(head.getY())); head.setLayoutParams(params); body=(ImageView)findViewById(R.id.body); body.setX((float)(Shared.screenWidth/7)); body.setY((float)(Shared.screenHeight/3.8)); LayoutParams params2 = (LayoutParams) body.getLayoutParams(); params2.width = (int)((Shared.screenWidth/7*6)-(body.getX())); params2.height=(int)((Shared.screenHeight)-(body.getY())); body.setLayoutParams(params2); go=(Button)findViewById(R.id.go); again=(Button)findViewById(R.id.again); stop=(ImageButton)findViewById(R.id.stop); stop.setOnClickListener( new OnClickListener() { public void onClick(View v) { Intent i =new Intent(CamActivity.this,Main.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); } }); btn = (ImageButton) findViewById(R.id.takePic); btn.setOnClickListener( new OnClickListener() { public void onClick(View v) { preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback); btn.setVisibility(View.INVISIBLE); btn.setEnabled(false); go.setVisibility(View.VISIBLE); go.setEnabled(true); head.setVisibility(View.INVISIBLE); body.setVisibility(View.INVISIBLE); go.setOnClickListener( new OnClickListener() { public void onClick(View v) { Shared.bm=Bitmap.createScaledBitmap(bmp, Shared.screenWidth, Shared.screenHeight, true); Intent i=new Intent(CamActivity.this,IKill.class); i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(i); } }); again.setVisibility(View.VISIBLE); again.setEnabled(true); again.setOnClickListener( new OnClickListener() { public void onClick(View v) { if (Build.VERSION.SDK_INT >= 11) { recreate(); } else { Intent intent = getIntent(); overridePendingTransition(0, 0); intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); finish(); overridePendingTransition(0, 0); startActivity(intent); } } }); } }); }
In addition, in my onCreate method, I also have the following:
requestWindowFeature(Window.FEATURE_NO_TITLE);
and logcat:
08-23 08:56:20.174: E/AndroidRuntime(835): FATAL EXCEPTION: main 08-23 08:56:20.174: E/AndroidRuntime(835): java.lang.NullPointerException 08-23 08:56:20.174: E/AndroidRuntime(835): at com.example.i_kill.CameraPreview.surfaceCreated(CameraPreview.java:38) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.SurfaceView.updateWindow(SurfaceView.java:569) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.SurfaceView.access$000(SurfaceView.java:86) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:174) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:680) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1842) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.Choreographer.doFrame(Choreographer.java:532) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.os.Handler.handleCallback(Handler.java:725) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.os.Handler.dispatchMessage(Handler.java:92) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.os.Looper.loop(Looper.java:137) 08-23 08:56:20.174: E/AndroidRuntime(835): at android.app.ActivityThread.main(ActivityThread.java:5041) 08-23 08:56:20.174: E/AndroidRuntime(835): at java.lang.reflect.Method.invokeNative(Native Method) 08-23 08:56:20.174: E/AndroidRuntime(835): at java.lang.reflect.Method.invoke(Method.java:511) 08-23 08:56:20.174: E/AndroidRuntime(835): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 08-23 08:56:20.174: E/AndroidRuntime(835): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 08-23 08:56:20.174: E/AndroidRuntime(835): at dalvik.system.NativeStart.main(Native Method) 08-23 08:56:26.065: E/Trace(909): error opening trace file: No such file or directory
and here is the whole class: com.example.i_kill package;
import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.hardware.Camera; import android.hardware.Camera.PictureCallback; import android.hardware.Camera.ShutterCallback; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; public class CamActivity extends Activity { public static final int MEDIA_TYPE_IMAGE = 1; public static String TAG="MainActivity"; private static Camera camera; private CameraPreview preview; private ImageView head,body; private ImageButton btn, stop; private Button again,go; private Bitmap bmp; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);
and camera preview class:
package com.example.i_kill; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.hardware.Camera; import android.hardware.Camera.PreviewCallback; import android.hardware.Camera.Size; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder holder; public Camera camera; public static String TAG="CameraPreview"; public CameraPreview(Context context) { super(context); holder=getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceCreated(SurfaceHolder holder) {
Thanks for your help:)