Saturday 16 December 2017

android - Null Pointer Exception when accessing a method of a class extends view from inside a sensor listener

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
the
myCompassView.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

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...