android - App crashes when On onActivityResult with Galaxy S4 -
i have activity takes picture , set imageview image captured, , uploads parse. works fine lg g4, galaxy s4 crashes after press button says want picture, crashes in onactivityresult function. see in log there nullpointerexception, guess because galaxy s4 has less memory lg g4. think understand problem(my assumption memory), have no clue how tackle it.
the activity
import android.content.intent; import android.content.sharedpreferences; import android.graphics.bitmap; import android.graphics.bitmapfactory; import android.graphics.canvas; import android.graphics.matrix; import android.graphics.paint; import android.graphics.porterduff; import android.graphics.porterduffxfermode; import android.graphics.rect; import android.graphics.rectf; import android.graphics.drawable.bitmapdrawable; import android.graphics.drawable.drawable; import android.net.uri; import android.os.bundle; import android.os.environment; import android.os.persistablebundle; import android.preference.preferencemanager; import android.provider.mediastore; import android.support.v7.app.appcompatactivity; import android.support.v7.widget.toolbar; import android.view.view; import android.widget.button; import android.widget.imageview; import android.widget.toast; import com.parse.findcallback; import com.parse.getdatacallback; import com.parse.parseexception; import com.parse.parsefile; import com.parse.parseobject; import com.parse.parsequery; import java.io.bytearrayoutputstream; import java.io.file; import java.text.simpledateformat; import java.util.date; import java.util.list; public class situationstatusactivity extends appcompatactivity { imageview imvcature_pic_nir; imageview imvcature_pic_sharon; private static final int request_code = 1; string imagefilepath; public sharedpreferences startexplepref; public string user; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_situation_status); if(savedinstancestate!=null){ imagefilepath = savedinstancestate.getstring("path"); } toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(toolbar); overridependingtransition(r.anim.fadein, r.anim.fadeout); // user startexplepref = preferencemanager.getdefaultsharedpreferences(this); user = startexplepref.getstring("user", ""); // upload nir pic string timestamp = new simpledateformat("yyyymmdd_hhmmss").format(new date()); imagefilepath = environment.getexternalstoragedirectory().tostring() + "/android/data/com.my.app/image-" + timestamp + ".png"; imvcature_pic_nir = (imageview) findviewbyid(r.id.nirpic); imvcature_pic_sharon = (imageview) findviewbyid(r.id.sharonpic); button uploadpic = (button) findviewbyid(r.id.picuploadbutton); uploadpic.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { /*************************** camera intent start ************************/ file imagefile = new file(imagefilepath); uri imagefileuri = uri.fromfile(imagefile); // convert path uri // standard intent action can sent have camera // application capture image , return it. intent intent = new intent(mediastore.action_image_capture); intent.putextra(mediastore.extra_output, imagefileuri); // set image file name startactivityforresult(intent, 1); /*************************** camera intent end ************************/ } }); updatepic(); } @override public void onsaveinstancestate(bundle outstate, persistablebundle outpersistentstate) { outstate.putstring("path", imagefilepath); } public void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); // if picture taken if (requestcode == request_code && resultcode == result_ok) { bitmapfactory.options bmpfactoryoptions = new bitmapfactory.options(); bmpfactoryoptions.injustdecodebounds = true; bmpfactoryoptions.insamplesize = 5; bmpfactoryoptions.injustdecodebounds = false; //imagefilepath image path pass intent bitmap bp = bitmapfactory.decodefile(imagefilepath, bmpfactoryoptions); //rotate image 90 degrees matrix rotatematrix = new matrix(); rotatematrix.postrotate(90); bitmap rotatedbitmap = bitmap.createbitmap(bp, 0, 0, bp.getwidth(), bp.getheight(), rotatematrix, false); // drawable d = new bitmapdrawable(rotatedbitmap); bytearrayoutputstream stream = new bytearrayoutputstream(); // // compress image lower quality scale 1 - 100 rotatedbitmap.compress(bitmap.compressformat.jpeg, 100, stream); byte[] image = stream.tobytearray(); // // // create parsefile parsefile file = new parsefile("image.png", image); // // upload image parse cloud file.saveinbackground(); // // // create new class called "imageupload" in parse parseobject situationpic = new parseobject("situationpic"); // // // create column named "imagename" , set string situationpic.put("imagename", "first pic"); // situationpic.put("user", user); // // create column named "imagefile" , insert image situationpic.put("imagefile", file); // // // create class , columns situationpic.saveinbackground(); if (user.equals("nir")) { imvcature_pic_nir.setimagebitmap(getroundedcornerbitmap(rotatedbitmap, 500)); imvcature_pic_nir.setscaletype(imageview.scaletype.fit_xy); } else if (user.equals("sharon")) { imvcature_pic_sharon.setimagebitmap(getroundedcornerbitmap(rotatedbitmap, 500)); imvcature_pic_sharon.setscaletype(imageview.scaletype.fit_xy); } else { toast.maketext(situationstatusactivity.this, "error", toast.length_long).show(); } // if picture not taken } else { toast.maketext(getapplicationcontext(), "not taken", toast.length_long).show(); } // updatepic(); } public bitmap nirbitmap; public bitmap sharonbitmap; //change load in beginiing public void updatepic() { // update photo of nir parsequery<parseobject> querynir = parsequery.getquery("situationpic"); querynir.orderbydescending("updatedat"); querynir.whereequalto("user", "nir"); querynir.findinbackground(new findcallback<parseobject>() { @override public void done(list<parseobject> objects, parseexception e) { parseobject object = objects.get(0); parsefile applicantresume = (parsefile) object.get("imagefile"); applicantresume.getdatainbackground(new getdatacallback() { public void done(byte[] data, parseexception e) { if (e == null) { bitmap bmp = bitmapfactory.decodebytearray(data, 0, data.length); matrix rotatematrix = new matrix(); rotatematrix.postrotate(360); bitmap rotatedbitmap = bitmap.createbitmap(bmp, 0, 0, bmp.getwidth(), bmp.getheight(), rotatematrix, false); nirbitmap = rotatedbitmap; imvcature_pic_nir.setimagebitmap(getroundedcornerbitmap(rotatedbitmap, 500)); imvcature_pic_nir.setscaletype(imageview.scaletype.fit_xy); } } }); } }); // update photo of sharon parsequery<parseobject> queryshn = parsequery.getquery("situationpic"); queryshn.orderbydescending("updatedat"); queryshn.whereequalto("user", "sharon"); queryshn.findinbackground(new findcallback<parseobject>() { @override public void done(list<parseobject> objects, parseexception e) { parseobject object = objects.get(0); parsefile applicantresume = (parsefile) object.get("imagefile"); applicantresume.getdatainbackground(new getdatacallback() { public void done(byte[] data, parseexception e) { if (e == null) { bitmap bmp = bitmapfactory.decodebytearray(data, 0, data.length); matrix rotatematrix = new matrix(); rotatematrix.postrotate(180); bitmap rotatedbitmap = bitmap.createbitmap(bmp, 0, 0, bmp.getwidth(), bmp.getheight(), rotatematrix, false); sharonbitmap = rotatedbitmap; imvcature_pic_sharon.setimagebitmap(getroundedcornerbitmap(rotatedbitmap, 500)); imvcature_pic_sharon.setscaletype(imageview.scaletype.fit_xy); } } }); } }); } public static bitmap getroundedcornerbitmap(bitmap bitmap, int pixels) { bitmap output = bitmap.createbitmap(bitmap.getwidth(), bitmap .getheight(), bitmap.config.argb_8888); canvas canvas = new canvas(output); final int color = 0xff424242; final paint paint = new paint(); final rect rect = new rect(0, 0, bitmap.getwidth(), bitmap.getheight()); final rectf rectf = new rectf(rect); final float roundpx = pixels; paint.setantialias(true); canvas.drawargb(0, 0, 0, 0); paint.setcolor(color); canvas.drawroundrect(rectf, roundpx, roundpx, paint); paint.setxfermode(new porterduffxfermode(porterduff.mode.src_in)); canvas.drawbitmap(bitmap, rect, rect, paint); return output; } } the logcat
fatal exception: main process: fastner.israel.nir_zabari.onelove, pid: 31324 java.lang.runtimeexception: unable resume activity {fastner.israel.nir_zabari.onelove/fastner.israel.nir_zabari.onelove.situationstatusactivity}: java.lang.runtimeexception: failure delivering result resultinfo{who=null, request=1, result=-1, data=null} activity {fastner.israel.nir_zabari.onelove/fastner.israel.nir_zabari.onelove.situationstatusactivity}: java.lang.nullpointerexception: attempt invoke virtual method 'int android.graphics.bitmap.getwidth()' on null object reference @ android.app.activitythread.performresumeactivity(activitythread.java:3394) @ android.app.activitythread.handleresumeactivity(activitythread.java:3425) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2763) @ android.app.activitythread.handlerelaunchactivity(activitythread.java:4462) @ android.app.activitythread.access$1000(activitythread.java:177) @ android.app.activitythread$h.handlemessage(activitythread.java:1454) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:145) @ android.app.activitythread.main(activitythread.java:5942) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1400) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:1195) caused by: java.lang.runtimeexception: failure delivering result resultinfo{who=null, request=1, result=-1, data=null} activity {fastner.israel.nir_zabari.onelove/fastner.israel.nir_zabari.onelove.situationstatusactivity}: java.lang.nullpointerexception: attempt invoke virtual method 'int android.graphics.bitmap.getwidth()' on null object reference @ android.app.activitythread.deliverresults(activitythread.java:4058) @ android.app.activitythread.performresumeactivity(activitythread.java:3380) @ android.app.activitythread.handleresumeactivity(activitythread.java:3425) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2763) @ android.app.activitythread.handlerelaunchactivity(activitythread.java:4462) @ android.app.activitythread.access$1000(activitythread.java:177) @ android.app.activitythread$h.handlemessage(activitythread.java:1454) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:145) @ android.app.activitythread.main(activitythread.java:5942) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1400) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:1195) caused by: java.lang.nullpointerexception: attempt invoke virtual method 'int android.graphics.bitmap.getwidth()' on null object reference @ fastner.israel.nir_zabari.onelove.situationstatusactivity.onactivityresult(situationstatusactivity.java:117) @ android.app.activity.dispatchactivityresult(activity.java:6549) @ android.app.activitythread.deliverresults(activitythread.java:4054) @ android.app.activitythread.performresumeactivity(activitythread.java:3380) @ android.app.activitythread.handleresumeactivity(activitythread.java:3425) @ android.app.activitythread.handlelaunchactivity(activitythread.java:2763) @ android.app.activitythread.handlerelaunchactivity(activitythread.java:4462) @ android.app.activitythread.access$1000(activitythread.java:177) @ android.app.activitythread$h.handlemessage(activitythread.java:1454) @ android.os.handler.dispatchmessage(handler.java:102) @ android.os.looper.loop(looper.java:145) @ android.app.activitythread.main(activitythread.java:5942) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1400) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:1195)
before doing work decoded bitmap need check decoded well.
// code above if (requestcode == request_code && resultcode == result_ok) { bitmapfactory.options bmpfactoryoptions = new mapfactory.options(); bmpfactoryoptions.injustdecodebounds = true; bmpfactoryoptions.insamplesize = 5; bmpfactoryoptions.injustdecodebounds = false; //imagefilepath image path pass intent bitmap bp = bitmapfactory.decodefile(imagefilepath, bmpfactoryoptions); if (bp != null) { //rotate image 90 degrees matrix rotatematrix = new matrix(); rotatematrix.postrotate(90); bitmap rotatedbitmap = bitmap.createbitmap(bp, 0, 0, bp.getwidth(), bp.getheight(), rotatematrix, false); } // code below
Comments
Post a Comment