Android custom camera crashes on resume -


i have custom camera activity in app, working fine, when press home button while in camera activity, , return app, crashes, , logcat says there null pointer exception @ surface view creation. setup method called on 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 =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, on oncreate method have this:

requestwindowfeature(window.feature_no_title);      // hide status bar     final window win = getwindow();     win.setflags(windowmanager.layoutparams.flag_fullscreen,                windowmanager.layoutparams.flag_fullscreen);     setcontentview(r.layout.activity_camera); 

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):  @  com.example.i_kill.camerapreview.surfacecreated(camerapreview.java:38) 08-23 08:56:20.174: e/androidruntime(835):  @    android.view.surfaceview.updatewindow(surfaceview.java:569) 08-23 08:56:20.174: e/androidruntime(835):  @  android.view.surfaceview.access$000(surfaceview.java:86) 08-23 08:56:20.174: e/androidruntime(835):  @  android.view.surfaceview$3.onpredraw(surfaceview.java:174) 08-23 08:56:20.174: e/androidruntime(835):  @    android.view.viewtreeobserver.dispatchonpredraw(viewtreeobserver.java:680) 08-23 08:56:20.174: e/androidruntime(835):  @  android.view.viewrootimpl.performtraversals(viewrootimpl.java:1842) 08-23 08:56:20.174: e/androidruntime(835):  @  android.view.viewrootimpl.dotraversal(viewrootimpl.java:989) 08-23 08:56:20.174: e/androidruntime(835):  @  android.view.viewrootimpl$traversalrunnable.run(viewrootimpl.java:4351) 08-23 08:56:20.174: e/androidruntime(835):  @  android.view.choreographer$callbackrecord.run(choreographer.java:749) 08-23 08:56:20.174: e/androidruntime(835):  @  android.view.choreographer.docallbacks(choreographer.java:562) 08-23 08:56:20.174: e/androidruntime(835):  @  android.view.choreographer.doframe(choreographer.java:532) 08-23 08:56:20.174: e/androidruntime(835):  @  android.view.choreographer$framedisplayeventreceiver.run(choreographer.java:735) 08-23 08:56:20.174: e/androidruntime(835):  @  android.os.handler.handlecallback(handler.java:725) 08-23 08:56:20.174: e/androidruntime(835):  @    android.os.handler.dispatchmessage(handler.java:92) 08-23 08:56:20.174: e/androidruntime(835):  @ android.os.looper.loop(looper.java:137) 08-23 08:56:20.174: e/androidruntime(835):  @  android.app.activitythread.main(activitythread.java:5041) 08-23 08:56:20.174: e/androidruntime(835):  @    java.lang.reflect.method.invokenative(native method) 08-23 08:56:20.174: e/androidruntime(835):  @  java.lang.reflect.method.invoke(method.java:511) 08-23 08:56:20.174: e/androidruntime(835):  @  com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:793) 08-23 08:56:20.174: e/androidruntime(835):  @  com.android.internal.os.zygoteinit.main(zygoteinit.java:560) 08-23 08:56:20.174: e/androidruntime(835):  @ 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's entire class: package com.example.i_kill;

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);      // hide status bar     final window win = getwindow();     win.setflags(windowmanager.layoutparams.flag_fullscreen,                windowmanager.layoutparams.flag_fullscreen);     setcontentview(r.layout.activity_camera);  }     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 =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);                     }                  }             });          }     });   }  shuttercallback shuttercallback = new shuttercallback() {     public void onshutter() {         log.d(tag, "onshutter'd");     } };  picturecallback rawcallback = new picturecallback() {     public void onpicturetaken(byte[] data, camera camera) {         log.d(tag, "onpicturetaken - raw");     } };  /** handles data jpeg picture */ picturecallback jpegcallback = new picturecallback() {     public void onpicturetaken(byte[] data, camera camera) {         bmp=bitmapfactory.decodebytearray(data, 0, data.length );         system.out.println(bmp.getheight());         system.out.println(bmp.getwidth()); }; };   public void onpause(){ super.onpause(); if(camera!=null){     camera.stoppreview();     camera.setpreviewcallback(null);      camera.release();     camera = null; }   }   public void onresume()  { super.onresume(); setup();     } } 

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) { // surface has been created, tell camera draw preview.  camera = getcamerainstance();    try {          camera.setpreviewdisplay(holder); camera.setpreviewcallback(new previewcallback() {      public void onpreviewframe(byte[] data, camera arg1) {         fileoutputstream outstream = null;         try {             outstream = new fileoutputstream(string.format("/sdcard/%d.jpg", system.currenttimemillis()));               outstream.write(data);             outstream.close();             log.d(tag, "onpreviewframe - wrote bytes: " + data.length);         } catch (filenotfoundexception e) {             e.printstacktrace();         } catch (ioexception e) {             e.printstacktrace();         } {         }             camerapreview.this.invalidate();     } });    } catch (ioexception e) { e.printstacktrace(); }  }  public void surfacedestroyed(surfaceholder holder) {  if(camera!=null){     camera.stoppreview();     camera.setpreviewcallback(null);      camera.release();     camera = null; }  } public void surfacechanged(surfaceholder holder, int format, int w, int h) { camera.parameters parameters = camera.getparameters();   list<size> previewsizes = parameters.getsupportedpreviewsizes();   size bestsize = null;   int bestdiff = 0;  int diff = 0;   (size size : previewsizes) {       diff = math.abs(h - size.height) + math.abs(w - size.width);   if (bestsize == null || diff < bestdiff) {           bestsize = size;           bestdiff = diff;   }   parameters.setpreviewsize(bestsize.width, bestsize.height);   camera.setparameters(parameters);   }        //start preview of camera camera.startpreview(); }  @override public void draw(canvas canvas) {     super.draw(canvas);     paint p= new paint(color.red);     log.d(tag,"draw");     canvas.drawtext("preview", canvas.getwidth()/2, canvas.getheight()/2, p ); }  private camera getcamerainstance(){ camera c = null; try {     c = camera.open(); // attempt camera instance } catch (exception e){     // camera not available (in use or not exist) } return c; // returns null if camera unavailable } } 

thanks :)

i solved calling setcontentview on resume. thank all!