java - Null Pointer Exception - What did I not initialize? -
i making simple reminder app. getting null pointer exception when reminder goes off.
here key info logcat: caused by: java.lang.nullpointerexception @ com.joshbgold.move.alarmreceiver.onreceive(alarmreceiver.java:34)
evidently not initializing alarmactivity inst properly. know simple fix, patience newer java programmer.
alarmreceiver.java: import android.app.activity; import android.content.componentname; import android.content.context; import android.content.intent; import android.media.mediaplayer; import android.support.v4.content.wakefulbroadcastreceiver; /** * created joshg on 7/6/2015. */ public class alarmreceiver extends wakefulbroadcastreceiver { @override public void onreceive(final context context, intent intent) { //mediaplayer used play mp3 file final mediaplayer mediaplayer = mediaplayer.create(context, r.drawable.om_mani_short); mediaplayer.setoncompletionlistener(new mediaplayer.oncompletionlistener() { @override public void oncompletion(mediaplayer mediaplayer) { mediaplayer.stop(); mediaplayer.release(); } }); mediaplayer.start(); //this update ui message alarmactivity inst = alarmactivity.instance(); inst.setalarmtext("stretch"); //this send notification message componentname comp = new componentname(context.getpackagename(), alarmservice.class.getname()); startwakefulservice(context, (intent.setcomponent(comp))); setresultcode(activity.result_ok); } } alarmactivity.java:
package com.joshbgold.move; import android.app.activity; import android.app.alarmmanager; import android.app.pendingintent; import android.content.intent; import android.media.mediaplayer; import android.os.bundle; import android.util.log; import android.view.view; import android.widget.button; import android.widget.textview; import android.widget.timepicker; import android.widget.togglebutton; import java.util.calendar; /** * created joshg on 7/6/2015. */ public class alarmactivity extends activity { alarmmanager alarmmanager; private pendingintent pendingintent; private timepicker alarmtimepicker; private static alarmactivity inst; private textview alarmtextview; public static alarmactivity instance() { return inst; } @override public void onstart() { super.onstart(); inst = this; } @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); alarmtimepicker = (timepicker) findviewbyid(r.id.alarmtimepicker); alarmtextview = (textview) findviewbyid(r.id.alarmtext); togglebutton alarmtoggle = (togglebutton) findviewbyid(r.id.alarmtoggle); final button exitbutton = (button) findviewbyid(r.id.exitbutton); alarmmanager = (alarmmanager) getsystemservice(alarm_service); final mediaplayer mediaplayer = mediaplayer.create(this, r.drawable.om_mani_short); mediaplayer.setoncompletionlistener(new mediaplayer.oncompletionlistener() { @override public void oncompletion(mediaplayer mediaplayer) { mediaplayer.stop(); mediaplayer.release(); } }); mediaplayer.start(); view.onclicklistener quitapp = new view.onclicklistener() { //this block stops music when exiting @override public void onclick(view view) { if (mediaplayer != null) try { if (mediaplayer.isplaying()) { mediaplayer.stop(); mediaplayer.release(); } } catch (exception e) { log.d("alarm activity", e.tostring()); } finish(); } }; exitbutton.setonclicklistener(quitapp); } public void ontoggleclicked(view view) { if (((togglebutton) view).ischecked()) { log.d("myactivity", "alarm on"); calendar calendar = calendar.getinstance(); calendar.set(calendar.hour_of_day, alarmtimepicker.getcurrenthour()); calendar.set(calendar.minute, alarmtimepicker.getcurrentminute()); intent myintent = new intent(alarmactivity.this, alarmreceiver.class); pendingintent = pendingintent.getbroadcast(alarmactivity.this, 0, myintent, 0); alarmmanager.set(alarmmanager.rtc, calendar.gettimeinmillis(), pendingintent); } else { alarmmanager.cancel(pendingintent); setalarmtext("alarm off"); log.d("myactivity", "alarm off"); } } public void setalarmtext(string alarmtext) { alarmtextview.settext(alarmtext); } } alarm service.java
package com.joshbgold.move; import android.app.intentservice; import android.app.notificationmanager; import android.app.pendingintent; import android.content.context; import android.content.intent; import android.support.v4.app.notificationcompat; import android.util.log; /** * created joshg on 7/6/2015. */ public class alarmservice extends intentservice { private notificationmanager alarmnotificationmanager; public alarmservice() { super("alarmservice"); } @override public void onhandleintent(intent intent) { sendnotification("stretch"); } private void sendnotification(string msg) { log.d("alarmservice", "preparing send notification...: " + msg); alarmnotificationmanager = (notificationmanager) .getsystemservice(context.notification_service); pendingintent contentintent = pendingintent.getactivity(this, 0, new intent(this, alarmactivity.class), 0); notificationcompat.builder alarmnotificationbuilder = new notificationcompat.builder( this).setcontenttitle("reminder").setsmallicon(r.mipmap.ic_launcher) .setstyle(new notificationcompat.bigtextstyle().bigtext(msg)) .setcontenttext(msg); alarmnotificationbuilder.setcontentintent(contentintent); alarmnotificationmanager.notify(1, alarmnotificationbuilder.build()); log.d("alarmservice", "notification sent."); } } here contents of logcat. have set log level of error:
07-07 18:53:13.119 13065-13065/com.joshbgold.move e/﹕ mali: revision=linux-r3p2-01rel2 build_date=mon nov 18 21:41:36 kst 2013 07-07 19:00:11.569 16746-16746/com.joshbgold.move e/androidruntime﹕ fatal exception: main java.lang.runtimeexception: unable start receiver com.joshbgold.move.alarmreceiver: java.lang.nullpointerexception @ android.app.activitythread.handlereceiver(activitythread.java:2469) @ android.app.activitythread.access$1600(activitythread.java:158) @ android.app.activitythread$h.handlemessage(activitythread.java:1372) @ android.os.handler.dispatchmessage(handler.java:99) @ android.os.looper.loop(looper.java:176) @ android.app.activitythread.main(activitythread.java:5365) @ java.lang.reflect.method.invokenative(native method) @ java.lang.reflect.method.invoke(method.java:511) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1102) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:869) @ dalvik.system.nativestart.main(native method) caused by: java.lang.nullpointerexception @ com.joshbgold.move.alarmreceiver.onreceive(alarmreceiver.java:34) @ android.app.activitythread.handlereceiver(activitythread.java:2462) at android.app.activitythread.access$1600(activitythread.java:158) at android.app.activitythread$h.handlemessage(activitythread.java:1372) at android.os.handler.dispatchmessage(handler.java:99) at android.os.looper.loop(looper.java:176) at android.app.activitythread.main(activitythread.java:5365) at java.lang.reflect.method.invokenative(native method) at java.lang.reflect.method.invoke(method.java:511) at com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:1102) at com.android.internal.os.zygoteinit.main(zygoteinit.java:869) at dalvik.system.nativestart.main(native method)
if class, line 34
inst.setalarmtext("stretch"); which points line above not getting actual activity
alarmactivity inst = alarmactivity.instance(); check alarmactivity class make sure inst not null when created instance() method.
can post alarmactivity class see how creating/fetching instance?
Comments
Post a Comment