2016-11-21 11 views
-2

私はいくつかの特定のセンサーから読み込まれた最新の値で変数を更新する単純なAndroidクラスを作成しています(Light、tempなど)、getData()メソッドでアクセスしますが(センサー値)、エラーが発生しています。私が助けてくれることを願っています!エラーjava.lang.NullPointerException:仮想メソッド 'java.lang.Objectを呼び出そうとしました。' android.content.Context.getSystemService

ここは私の一般的なセンサークラスです。

MySensorここ

public class mySensor extends Service implements SensorEventListener { 

private SensorManager mSensorManager =null; 
private Sensor s=null; 

float data = 0; 


public void onCreate(){ 
    super.onCreate(); 
    mSensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE); 


} 


public mySensor(int type){ 

    //HERE I'M GETTING THE ERROR 
    s= mSensorManager.getDefaultSensor(type); 




} 

public String getData(){ 

    return String.valueOf(data); 
} 

@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (event.sensor.getType() == Sensor.TYPE_LIGHT) { 
     data = event.values[0]; 
    } 

} 

@Override 
public void onAccuracyChanged(Sensor sensor, int i) { 

} 
protected void onResume() { 

    mSensorManager.registerListener((SensorEventListener) this, s, SensorManager.SENSOR_DELAY_NORMAL); 


} 

protected void onPause() { 
    // super.onPause(); 
    mSensorManager.unregisterListener((SensorEventListener) this); 
} 
} 

は私MainActivityクラスI、単純なコールmLight =新しいmySensor(Sensor.TYPE_LIGHT)で

... 
E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: project.luke.com.sensorreader, PID: 25297 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{project.luke.com.sensorreader/project.luke.com.sensorreader.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.hardware.Sensor android.hardware.SensorManager.getDefaultSensor(int)' on a null object reference 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2460) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522) 
         at android.app.ActivityThread.access$800(ActivityThread.java:169) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421) 
         at android.os.Handler.dispatchMessage(Handler.java:111) 
         at android.os.Looper.loop(Looper.java:194) 
         at android.app.ActivityThread.main(ActivityThread.java:5546) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:967) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762) 
        Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.hardware.Sensor android.hardware.SensorManager.getDefaultSensor(int)' on a null object reference 
         at project.luke.com.sensorreader.mySensor.<init>(mySensor.java:39) 
         at project.luke.com.sensorreader.MainActivity.onCreate(MainActivity.java:32) 
         at android.app.Activity.performCreate(Activity.java:5975) 
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2413) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2522)  
         at android.app.ActivityThread.access$800(ActivityThread.java:169)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1421)  
         at android.os.Handler.dispatchMessage(Handler.java:111)  
         at android.os.Looper.loop(Looper.java:194)  
         at android.app.ActivityThread.main(ActivityThread.java:5546)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:372)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:967)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)  

ログです。これはエラーを引き起こし、mSensorManager = nullを常に発生させます。あなたのMainActivityから

+2

[NullPointerExceptionとは何ですか?それを修正するにはどうすればいいですか?](http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -it) –

+0

'Service'のランダムなサブクラスを作成せず、いくつかのコンストラクタでそれを使用します。おそらく、 'Service'を使う必要はありません。このロジックをあなたの既存の' Activity'に移してください。 'Service'が本当に必要な場合でも、インスタンスを自分で作成するのではなく、適切に使用する必要があります(例えば、' startService() ')。 – CommonsWare

+0

@Simze質問は「NPEとは何ですか?」ではありません。しかし、 "なぜ私は* NPEを初期化しようとしたのですか? – Sam

答えて

0

Intent intent = new Intent(this, mySensor.class); 
intent.putExtra("type", Sensor.TYPE_LIGHT); 

とあなたのサービス内:

@Override 
public IBinder onBind(Intent intent) { 
    mSensorManager= (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    int type = intent.getExtras().get("type"); 
    s= mSensorManager.getDefaultSensor(type); 
    return null; 
} 

は、あなたが削除することができます。

public mySensor(int type){ 
    ... 
} 

、最終的にあなたがonCreate以内に書いたコード。

+0

@Londrakeは理にかなっていますか? – Lino

関連する問題

 関連する問題