I want to pass the readings of a sensor to the class
MyCompassView
that extends a view, and based on the readings
from the sensor to be passed, a pointer is changing its orientation. Actually, all this
works fine, i tested it. But the same concept when I tried to implement it on a surface
view that opens the camera preview on the surface, it does not work and crashes the
app.
Simply, I have SurfaceViewHolder
class the holds
the camera preview, the MyCompassView
class as described above
and the MainActivity
that should has both views of
MyCompassView
and SurfaceHolder
on its
surface. The way I used to overlay the MainActivity
with these
views is as posted below: please help me to find why the method
myCompassView.update(azimuth);
that is located inside the
onSensorChanged
cause the logcate to say"Null Pointer
Exception"
UPDATE:
When
I omit myCompassView.update(azimuth);
the app works but with
drawings in the MyCompassView
class is static not indicting
orientation, ofcourse because of
themyCompassView.update(azimuth);
is not
activated.However, when i activate that method
the app crashs and the logcat
generates the posted output.
Line 100 is
myCompassView.update(azimuth);
MainActivity.java
public class Mainactivity extends ActionBarActivity implements SensorEventListener
{
private SurfaceHolderActivity myCameraSurfaceHolder;
private
View compassOverLayView;
private MyCompassView myCompassView;
private LayoutInflater loiViewInflater = null;
..
..
//myCompassView = new MyCompassView(getApplicationContext());
myCompassView =
(MyCompassView) findViewById(R.id.mycompass);
myCameraSurfaceHolder = new
SurfaceHolderActivity(this);
setContentView(myCameraSurfaceHolder);
loiViewInflater = (LayoutInflater)
getSystemService (Context.LAYOUT_INFLATER_SERVICE);
loiViewInflater =
LayoutInflater.from(getApplicationContext());
compassOverLayView =
loiViewInflater.inflate(R.layout.activity_viewactivity, null);
addContentView(compassOverLayView, new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
...
...
@Override
public void onSensorChanged(SensorEvent event) {
// TODO
Auto-generated method stub
switch (event.sensor.getType()) {
case
Sensor.TYPE_ACCELEROMETER:
valuesAccelerometer =
event.values.clone();
/*for (int i=0; i<3; i++) {
valuesAccelerometer[i] = event.values[i];
}*/
break;
case Sensor.TYPE_MAGNETIC_FIELD:
valuesMagneticField =
event.values.clone();
/*for (int i=0; i<3; i++) {
valuesMagneticField[i] = event.values[i];
}*/
break;
}
boolean success = SensorManager.getRotationMatrix(MatrixR,
MatrixI,
valuesMagneticField, valuesAccelerometer);
if (success)
{
SensorManager.getOrientation(MatrixR, MatrixValues);
azimuth =
Math.toDegrees(MatrixValues[0]);
pitch =
Math.toDegrees(MatrixValues[1]);
roll =
Math.toDegrees(MatrixValues[2]);
myCompassView.update(azimuth);
}
}
Activity_ViewActivity.xml:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.augrealtest00.Mainactivity"
>
android:id="@+id/mycompass"
android:layout_height="match_parent"
android:layout_width="match_parent"
class="com.example.augrealtest01.MyCompassView"/>
Logcat:
04-26
23:38:15.136: E/AndroidRuntime(18873): java.lang.NullPointerException
04-26
23:38:15.136: E/AndroidRuntime(18873):
at
com.example.augrealtest01.Mainactivity.onSensorChanged(Mainactivity.java:100)
04-26
23:38:15.136: E/AndroidRuntime(18873): at
android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManag
er.java:467)
04-26 23:38:15.136: E/AndroidRuntime(18873):
at
android.os.MessageQueue.nativePollOnce(Native Method)
04-26
23:38:15.136: E/AndroidRuntime(18873):
at
android.os.MessageQueue.next(MessageQueue.java:132)
04-26
23:38:15.136: E/AndroidRuntime(18873):
at
android.os.Looper.loop(Looper.java:124)
04-26 23:38:15.136:
E/AndroidRuntime(18873): at
android.app.ActivityThread.main(ActivityThread.java:5493)
No comments:
Post a Comment