i'm writing app show accelerometer readings, able yesterday write accelerometer code in main activity , works fine on emulator , device.
but today trying make function contains accelerometer code , return 3 integers x,y,z in integer array, make code think it`s right every time run project emulator gives error "unfortunately app-name has stopped" .
so wish , please .
logcat:
04-27 20:39:27.098: w/dalvikvm(812): threadid=1: thread exiting uncaught exception (group=0x40a70930) 04-27 20:39:27.118: e/androidruntime(812): fatal exception: main 04-27 20:39:27.118: e/androidruntime(812): java.lang.runtimeexception: unable start activity componentinfo{com.example.accelerometer_sensor/com.example.accelerometer_sensor.mainactivity}: java.lang.nullpointerexception 04-27 20:39:27.118: e/androidruntime(812): @ android.app.activitythread.performlaunchactivity(activitythread.java:2180) 04-27 20:39:27.118: e/androidruntime(812): @ android.app.activitythread.handlelaunchactivity(activitythread.java:2230) 04-27 20:39:27.118: e/androidruntime(812): @ android.app.activitythread.access$600(activitythread.java:141) 04-27 20:39:27.118: e/androidruntime(812): @ android.app.activitythread$h.handlemessage(activitythread.java:1234) 04-27 20:39:27.118: e/androidruntime(812): @ android.os.handler.dispatchmessage(handler.java:99) 04-27 20:39:27.118: e/androidruntime(812): @ android.os.looper.loop(looper.java:137) 04-27 20:39:27.118: e/androidruntime(812): @ android.app.activitythread.main(activitythread.java:5039) 04-27 20:39:27.118: e/androidruntime(812): @ java.lang.reflect.method.invokenative(native method) 04-27 20:39:27.118: e/androidruntime(812): @ java.lang.reflect.method.invoke(method.java:511) 04-27 20:39:27.118: e/androidruntime(812): @ com.android.internal.os.zygoteinit$methodandargscaller.run(zygoteinit.java:793) 04-27 20:39:27.118: e/androidruntime(812): @ com.android.internal.os.zygoteinit.main(zygoteinit.java:560) 04-27 20:39:27.118: e/androidruntime(812): @ dalvik.system.nativestart.main(native method) 04-27 20:39:27.118: e/androidruntime(812): caused by: java.lang.nullpointerexception 04-27 20:39:27.118: e/androidruntime(812): @ com.example.accelerometer_sensor.accelerometerclass.accelerometerinit(accelerometerclass.java:20) 04-27 20:39:27.118: e/androidruntime(812): @ com.example.accelerometer_sensor.mainactivity.oncreate(mainactivity.java:19) 04-27 20:39:27.118: e/androidruntime(812): @ android.app.activity.performcreate(activity.java:5104) 04-27 20:39:27.118: e/androidruntime(812): @ android.app.instrumentation.callactivityoncreate(instrumentation.java:1080) 04-27 20:39:27.118: e/androidruntime(812): @ android.app.activitythread.performlaunchactivity(activitythread.java:2144) 04-27 20:39:27.118: e/androidruntime(812): ... 11 more 04-27 20:39:30.119: i/process(812): sending signal. pid: 812 sig: 9
here`s main activity code:
package com.example.accelerometer_sensor; import android.os.bundle; import android.app.activity; import android.view.menu; import android.widget.textview; public class mainactivity extends activity { int [] accval = new int[3]; accelerometerclass acc = new accelerometerclass(); textview acceleration; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); acc = new accelerometerclass(); accval = acc.accelerometerinit(); acceleration = (textview)findviewbyid(r.id.acceleration); acceleration.settext("x: "+accval[0]+ "y: "+accval[1]+ "z: "+accval[2]); } @override public boolean oncreateoptionsmenu(menu menu) { // inflate menu; adds items action bar if present. getmenuinflater().inflate(r.menu.activity_main, menu); return true; } }
and accelerometerclass code ::
package com.example.accelerometer_sensor; import android.content.context; import android.hardware.sensor; import android.hardware.sensorevent; import android.hardware.sensoreventlistener; import android.hardware.sensormanager; public class accelerometerclass implements sensoreventlistener { private static context context; int [] vals = new int[3]; public int [] accelerometerinit() { sensor accelerometer; sensormanager sm; sm = (sensormanager)context.getsystemservice(context.sensor_service); accelerometer=sm.getdefaultsensor(sensor.type_accelerometer); sm.registerlistener(this, accelerometer,sensormanager.sensor_delay_normal); return vals; } @override public void onaccuracychanged(sensor sensor, int accuracy) { // todo auto-generated method stub } @override public void onsensorchanged(sensorevent event) { // todo auto-generated method stub vals[0]=(int)event.values[0]; vals[1]=(int)event.values[1]; vals[2]=(int)event.values[2]; } }
thanks .
your context in accelerometerclass
never set!
possible solution:
public class accelerometerclass implements sensoreventlistener { int[] vals = new int[3]; public int[] accelerometerinit(context context) { sensormanager sm = (sensormanager) context.getsystemservice(context.sensor_service); sensor accelerometer = sm.getdefaultsensor(sensor.type_accelerometer); sm.registerlistener(this, accelerometer, sensormanager.sensor_delay_normal); return vals; } @override public void onaccuracychanged(sensor sensor, int accuracy) { } @override public void onsensorchanged(sensorevent event) { vals[0] = (int) event.values[0]; vals[1] = (int) event.values[1]; vals[2] = (int) event.values[2]; } }
in activity use
accelerometerclass ac = new accelerometerclass(); ac.accelerometerinit(this);