android - Not able to capture image from camera getting NullPointerException -
using camera class, writing simple code capture image on press on button getting nullpointerexception
below code.
surfaceview msurfaceview; surfaceholder msurfaceholder; camera mcamera; imageview mbutton; @suppresswarnings("deprecation") @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); msurfaceview = (surfaceview) this.findviewbyid(r.id.cameraview); msurfaceholder = msurfaceview.getholder(); msurfaceholder.settype(surfaceholder.surface_type_push_buffers); msurfaceholder.addcallback(this); msurfaceview.setfocusable(true); msurfaceview.setfocusableintouchmode(true); msurfaceview.setclickable(true); mbutton = (imageview)findviewbyid(r.id.capture); mbutton.setonclicklistener(this); } @suppresswarnings("deprecation") @override public void surfacechanged(surfaceholder arg0, int arg1, int arg2, int arg3) { mcamera.startpreview(); } @suppresswarnings("deprecation") @override public void surfacecreated(surfaceholder holder) { mcamera = camera.open(); try { mcamera.setpreviewdisplay(holder); camera.parameters mparameters = mcamera.getparameters(); if (this.getresources().getconfiguration().orientation != configuration.orientation_landscape) { mparameters.set("orientation", "portrait"); mcamera.setdisplayorientation(90); } else { mparameters.set("orientation", "landscape"); mcamera.setdisplayorientation(0); } mcamera.setparameters(mparameters); mcamera.setpreviewdisplay(holder); } catch (ioexception e) { mcamera.release(); } mcamera.startpreview(); } @suppresswarnings("deprecation") @override public void surfacedestroyed(surfaceholder arg0) { mcamera.stoppreview(); mcamera.release(); } @suppresswarnings("deprecation") @override public void onpicturetaken(byte[] data, camera camera) { try { uri imagefileuri = this.getcontentresolver().insert(media.external_content_uri, new contentvalues()); outputstream imagefileos = getcontentresolver().openoutputstream(imagefileuri); imagefileos.write(data); imagefileos.flush(); imagefileos.close(); } catch (filenotfoundexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } catch (nullpointerexception e) { e.printstacktrace(); toast.maketext(this, e.getmessage(), toast.length_long).show(); } mcamera.startpreview(); } @suppresswarnings("deprecation") @override public void onclick(view v) { mcamera.takepicture(null, null, snapshot.this); } i getting nullpointerexeption here:
this.getcontentresolver().insert(media.external_content_uri, new contentvalues()); androidmanifest.xml below
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="8" android:targetsdkversion="21" /> <uses-permission android:name="android.permission.camera" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.write_external_storage"/> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/apptheme" > <activity android:name=".snapshot" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> </manifest> below logcat shows error message
e/databaseutils( 718): java.lang.nullpointerexception: attempt invoke virtual method 'int java.lang.string.lastindexof(int)' on null object reference e/databaseutils( 718): @ com.android.providers.media.mediaprovider.insertfile(mediaprovider.java:3151) e/databaseutils( 718): @ com.android.providers.media.mediaprovider.insertinternal(mediaprovider.java:3543) e/databaseutils( 718): @ com.android.providers.media.mediaprovider.insert(mediaprovider.java:2959) e/databaseutils( 718): @ android.content.contentprovider$transport.insert(contentprovider.java:235) e/databaseutils( 718): @ android.content.contentprovidernative.ontransact(contentprovidernative.java:163) e/databaseutils( 718): @ android.os.binder.exectransact(binder.java:446) w/system.err(11632): java.lang.nullpointerexception: attempt invoke virtual method 'int java.lang.string.lastindexof(int)' on null object reference w/system.err(11632): @ android.os.parcel.readexception(parcel.java:1546) w/system.err(11632): @ android.database.databaseutils.readexceptionfromparcel(databaseutils.java:185) w/system.err(11632): @ android.database.databaseutils.readexceptionfromparcel(databaseutils.java:137) w/system.err(11632): @ android.content.contentproviderproxy.insert(contentprovidernative.java:475) w/system.err(11632): @ android.content.contentresolver.insert(contentresolver.java:1207) w/system.err(11632): @ com.parashu.mycamera.snapshot.onpicturetaken(snapshot.java:87) w/system.err(11632): @ android.hardware.camera$eventhandler.handlemessage(camera.java:1094) w/system.err(11632): @ android.os.handler.dispatchmessage(handler.java:102) w/system.err(11632): @ android.os.looper.loop(looper.java:135) w/system.err(11632): @ android.app.activitythread.main(activitythread.java:5221) w/system.err(11632): @ java.lang.reflect.method.invoke(native method) w/system.err(11632): @ java.lang.reflect.method.invoke(method.java:372) w/system.err(11632): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:899) w/system.err(11632): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:694) d/gdp (11632): nullpointerexception e/qcamerahwi( 189): android::status_t android::qcamerahardwareinterface::setpreviewwindow(preview_stream_ops_t*): bug, cannot handle new window in started state e/mm-camera( 201): config_v2_proc_event_message_0: unsupported message id: 40 e/mm-camera( 201): config_msg_id_stop_ack: streamon_mask not clear. should not call pp_release_hw d/qcamerahwi( 189): android::status_t android::qcamerahardwareinterface::startpreview(): start preview i/qcamerahwi( 189): android::status_t android::qcamerahardwareinterface::startpreview2():setting zsl mode e/mm-camera( 201): config_proc_camera_set_inform_startpreview e/mm-camera( 201): config_update_stream_info storing stream parameters video inst 1 : width = 640, height 480, format = 1 inst_handle = 810081 cid = 0 e/mm-camera( 201): config_update_stream_info storing stream parameters video inst 3 : width = 640, height 480, format = 1 inst_handle = 830083 cid = 0 e/mm-camera( 201): config_update_stream_info storing stream parameters video inst 4 : width = 512, height 384, format = 1 inst_handle = 840084 cid = 0 e/mm-camera( 201): config_decide_vfe_outputs: ports used 3, op mode 1 e/mm-camera( 201): config_decide_vfe_outputs current mode 5 full size streaming : disabled e/mm-camera( 201): config_decide_vfe_outputs: primary: 640x480, extra_pad: 0x0, fmt: 1, type: 1, path: 1 e/mm-camera( 201): config_decide_vfe_outputs: secondary: 640x480, extra_pad: 0x0, fmt: 1, type: 3, path: 4 e/mm-camera( 201): config_update_inst_handles updated inst handles 810081, 830083, 0, 0 e/mm-camera( 201): camif_client_set_params: camif has associated obj mask 0x1 e/mm-camera( 201): config_v2_camera_start_common camif_params_add_obj_id failed -1 e/mm-camera( 201): vfe_operation_config: format 3 e/mm-camera( 201): vfe_operation_config:vfe_op_mode=5 e/mm-libcamera2( 189): profile hal: first preview frame received: 1434375940.660242458 e/qcamerahwi_preview( 189): processpreviewframewithdisplay: buffer enqueued not locked d/audio_hw_primary( 189): disable_audio_route: reset , update mixer path: low-latency-playback d/audio_hw_primary( 189): disable_snd_device: snd_device(2: speaker) what doing wrong?
issue got solved. media.external_content_uri default imported android.provider.mediastore.audio.media; used below code, worked fine. getapplicationcontext().getcontentresolver().insert(mediastore.images.media.external_content_uri, new contentvalues());
Comments
Post a Comment