java - Android Wear Step Counter crashing app -
i writing app read heart rate , step count using android wear device. heart rate sensor works step count causing issue. however, on commenting listener step counter , registering null in onresume() app works heart rate sensor. i'm not getting log regarding otherwise have posted here. here's code i'm using
import android.app.activity; import android.content.context; import android.hardware.sensor; import android.hardware.sensorevent; import android.hardware.sensoreventlistener; import android.hardware.sensormanager; import android.os.bundle; import android.support.wearable.view.watchviewstub; import android.util.log; import android.widget.textview; import com.google.android.gms.common.api.googleapiclient; import com.google.android.gms.common.api.pendingresult; import com.google.android.gms.common.api.resultcallback; import com.google.android.gms.wearable.node; import com.google.android.gms.wearable.nodeapi; import com.google.android.gms.wearable.wearable; import java.nio.bytebuffer; import java.util.list; public class mainactivity extends activity { private sensormanager msensormanager; private textview mtextviewheart, mtextviewstep; private sensor mheartratesensor, mstepcountersensor; private googleapiclient mgoogleapiclient; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); watchviewstub stub = (watchviewstub) findviewbyid(r.id.watch_view_stub); stub.setonlayoutinflatedlistener(new watchviewstub.onlayoutinflatedlistener() { @override public void onlayoutinflated(watchviewstub stub) { mtextviewheart = (textview) stub.findviewbyid(r.id.value_heart); mtextviewstep = (textview) stub.findviewbyid(r.id.value_step); } }); msensormanager = (sensormanager) getsystemservice(context.sensor_service); mheartratesensor = msensormanager.getdefaultsensor(sensor.type_heart_rate); mstepcountersensor = msensormanager.getdefaultsensor(sensor.type_step_counter); mgoogleapiclient = new googleapiclient.builder(this).addapi(wearable.api).build(); mgoogleapiclient.connect(); } @override protected void onresume() { super.onresume(); msensormanager.registerlistener(heartlistener, mheartratesensor, sensormanager.sensor_delay_normal); msensormanager.registerlistener(steplistener, mstepcountersensor, sensormanager.sensor_delay_fastest); } @override protected void onpause() { super.onpause(); msensormanager.unregisterlistener(heartlistener, mheartratesensor); } sensoreventlistener heartlistener = new sensoreventlistener() { @override public void onsensorchanged(sensorevent event) { if (event.sensor.gettype() == sensor.type_heart_rate) { if (event.values.length > 0) { if (event.values[0] > 0.0f) { mtextviewheart.setbackgroundresource(android.r.color.holo_green_light); mtextviewheart.settext(float.tostring(event.values[0])); sendtohandheld(math.round(event.values[0]), sensor.type_heart_rate); } } } } @override public void onaccuracychanged(sensor sensor, int accuracy) { } }; sensoreventlistener steplistener = new sensoreventlistener() { @override public void onsensorchanged(sensorevent event) { if (event.sensor.gettype() == sensor.type_step_counter) { if (event.values.length > 0) { mtextviewstep.setbackgroundresource(android.r.color.holo_green_light); mtextviewstep.settext(float.tostring(event.values[0])); sendtohandheld(math.round(event.values[0]), sensor.type_step_counter); } } } @override public void onaccuracychanged(sensor sensor, int accuracy) { } }; private void sendtohandheld(final int val, final int type) { final pendingresult<nodeapi.getconnectednodesresult> nodes = wearable.nodeapi.getconnectednodes(mgoogleapiclient); nodes.setresultcallback(new resultcallback<nodeapi.getconnectednodesresult>() { @override public void onresult(nodeapi.getconnectednodesresult result) { final list<node> nodes = result.getnodes(); if (nodes != null) { (int = 0; < nodes.size(); i++) { final node node = nodes.get(i); wearable.messageapi.sendmessage(mgoogleapiclient, node.getid(), "/" + type, bytebuffer.allocate(4).putint(val).array()); log.d("sending", type + ":" + val); } } } }); } }
update
got log somehow
06-15 11:46:02.342 3355-3355/com.hsc.fit e/androidruntime﹕ fatal exception: main process: com.hsc.fit, pid: 3355 java.lang.nullpointerexception: attempt invoke virtual method 'void android.widget.textview.setbackgroundresource(int)' on null object reference @ com.hsc.fit.mainactivity$3.onsensorchanged(mainactivity.java:92) @ android.hardware.systemsensormanager$sensoreventqueue.dispatchsensorevent(systemsensormanager.java:405) @ android.os.messagequeue.nativepollonce(native method) @ android.os.messagequeue.next(messagequeue.java:143) @ android.os.looper.loop(looper.java:122) @ android.app.activitythread.main(activitythread.java:5221) @ java.lang.reflect.method.invoke(native method) @ java.lang.reflect.method.invoke(method.java:372) @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:899) @ com.android.internal.os.zygoteinit.main(zygoteinit.java:694)
fixed it. watchviewstub
's setonlayoutinflatedlistener()
called after onresume()
, , sensor gets registered in onresume()
. since text view used in listener of sensor, , wasn't assigned refrence yet, getting nullpointerexception
. moved sensor registertion inside watchviewstub
's listener , works now.
Comments
Post a Comment