java - coding android Accelerometer in class -


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);