i m a newbie to android and following new boston android series ,and got stuck here. Getting null pointer exception in sensor management app and app crashing in my class Accelerate. while testing on real device.
my code :
package com.ss;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.TextView;
public class Accelerate extends Activity implements SensorEventListener {
float x, y, sensorX, sensorY;
Bitmap ball;
SensorManager sm;
MyBringBackSurface ourSurfaceView;
@Override
protected void onPause() {
// TODO Auto-generated method stub
sm.unregisterListener(this);
super.onPause();
}
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent e) {
try {
Thread.sleep(16);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
sensorX = e.values[0]; // return sensor events of x axis
sensorY = e.values[1];
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
try {
setContentView(ourSurfaceView);
sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
if (sm.getSensorList(Sensor.TYPE_ACCELEROMETER).size() != 0) {
Sensor s = sm.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
sm.registerListener(this, s, SensorManager.SENSOR_DELAY_NORMAL);
}
ball = BitmapFactory
.decodeResource(getResources(), R.drawable.ball);
x = y = sensorX = sensorY = 0;
super.onCreate(savedInstanceState);
setContentView(new MyBringBackSurface(this));
ourSurfaceView.resume();
} catch (Exception e) {
Dialog d = new Dialog(this);
d.setTitle("ERROR");
TextView tv = new TextView(this);
String error = "IDHAR AYA HAI "+e.toString();
tv.setText(error);
d.setContentView(tv);
d.show();
}
}
public class MyBringBackSurface extends SurfaceView implements Runnable {
SurfaceHolder ourHolder;
Thread ourThread = null;
Boolean isRunning = false;
public MyBringBackSurface(Context context) {
super(context);
ourHolder = getHolder();
}
public void pause() {
// TODO Auto-generated method stub
isRunning = false;
while (true) {
Log.v("message", "Exceptino not");
try {
ourThread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
Log.v("message", "Exceptino", e);
}
break;
}
ourThread = null;
}
public void resume() {
isRunning = true;
ourThread = new Thread(this);
ourThread.start();
Log.v("message", "started thread");
}
@Override
public void run() {
Log.v("messge", isRunning.toString());
try {
Canvas canvas;
while (isRunning) {
if (!ourHolder.getSurface().isValid())
continue;
canvas = ourHolder.lockCanvas();
canvas.drawRGB(02, 02, 150);
float centerX = canvas.getWidth() / 2;
float centerY = canvas.getHeight() / 2;
canvas.drawBitmap(ball, centerX + sensorX * 20, centerY
+ sensorY * 20, null);
ourHolder.unlockCanvasAndPost(canvas);
Log.v("message", "run startede");
}
} catch (Exception ex) {
// TODO: handle exception
Log.e("mytag", "mymessage", ex);
}
}
}
}
Log cat
03-07 11:06:27.957: D/AndroidRuntime(749): Shutting down VM
03-07 11:06:27.967: W/dalvikvm(749): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
03-07 11:06:28.007: E/AndroidRuntime(749): FATAL EXCEPTION: main
03-07 11:06:28.007: E/AndroidRuntime(749): android.app.SuperNotCalledException: Activity {com.ss/com.ss.Accelerate} did not call through to super.onCreate()
03-07 11:06:28.007: E/AndroidRuntime(749): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2146)
03-07 11:06:28.007: E/AndroidRuntime(749): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
03-07 11:06:28.007: E/AndroidRuntime(749): at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-07 11:06:28.007: E/AndroidRuntime(749): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
03-07 11:06:28.007: E/AndroidRuntime(749): at android.os.Handler.dispatchMessage(Handler.java:99)
03-07 11:06:28.007: E/AndroidRuntime(749): at android.os.Looper.loop(Looper.java:137)
03-07 11:06:28.007: E/AndroidRuntime(749): at android.app.ActivityThread.main(ActivityThread.java:5041)
03-07 11:06:28.007: E/AndroidRuntime(749): at java.lang.reflect.Method.invokeNative(Native Method)
03-07 11:06:28.007: E/AndroidRuntime(749): at java.lang.reflect.Method.invoke(Method.java:511)
03-07 11:06:28.007: E/AndroidRuntime(749): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-07 11:06:28.007: E/AndroidRuntime(749): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-07 11:06:28.007: E/AndroidRuntime(749): at dalvik.system.NativeStart.main(Native Method)
03-07 11:06:31.887: I/Process(749): Sending signal. PID: 749 SIG: 9
03-07 11:06:28.007: E/AndroidRuntime(749): android.app.SuperNotCalledException: Activity {com.ss/com.ss.Accelerate} did not call through to super.onCreate()
Try calling super.onCreate(savedInstanceState)
first in your onCreate()
Method in the Accelerate
Class.