2012-05-24 3 views
0

Je suis en train de lire des accéléromètres pour attraper les utilisateurs qui secouent le téléphone. Quand un utilisateur secoue le téléphone, je veux le concevoir pour faire quelque chose. Cela fonctionne bien, mais j'ai mis dans une méthode onPause() parce que je n'ai pas besoin de l'accéléromètre détectant des mouvements de secousses lorsque l'utilisateur n'est pas dans l'application, car cela aurait des résultats non désirés. Donc dans l'onPause() je désinscrit l'accéléromètre du SensorManager.Mon onResume() lance une exception NullPointerException

J'espérais que dans onResume() je pourrais réenregistrer le SensorManager et poursuivre mon activité. Évidemment, cela ne fonctionne pas comme ça. J'ai lu la documentation et, honnêtement, je n'ai pas été capable de comprendre ce qui se passe.

code:

Je déclare la variable globale sensorMgr:

private SensorManager sensorMgr; 

Alors je vous inscrire à l'accéléromètre:

sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); 

    // Detect if device has accelerometer 
    boolean accelSupported = sensorMgr.registerListener(this, 
      SensorManager.SENSOR_ACCELEROMETER, 
      SensorManager.SENSOR_DELAY_GAME); 

    if (!accelSupported) { 
     // No accelerometer on this device 
     sensorMgr.unregisterListener(this, 
       SensorManager.SENSOR_ACCELEROMETER); 
    } 
    sensorMgr.registerListener(this, SensorManager.SENSOR_ACCELEROMETER, 
      SensorManager.SENSOR_DELAY_GAME); 

OnPause():

protected void onPause() { 
    if (sensorMgr != null) { 
     sensorMgr.unregisterListener(this, 
       SensorManager.SENSOR_ACCELEROMETER); 
     sensorMgr = null; 
    } 
    super.onPause(); 
} 

onResume() :

protected void onResume() { 
    sensorMgr.registerListener(this, SensorManager.SENSOR_ACCELEROMETER, 
     SensorManager.SENSOR_DELAY_GAME); 
    super.onResume(); 
} 

L'erreur:

05-24 14:35:54.058: E/AndroidRuntime(16783): java.lang.RuntimeException: Unable to resume activity : java.lang.NullPointerException 

Je vous remercie vraiment de vous aider les gars peuvent donner, et merci d'avance!

+0

Veuillez ajouter une sortie de débogage. SensorMgr est-il nul? Quelque chose est. –

+0

En fait oui, on me dit que sensorMgr est nul. Dois-je le réinitialiser même s'il s'agit d'une variable globale? – FeralShadow

+0

Où appelez-vous 'sensorMgr = (SensorManager) getSystemService (SENSOR_SERVICE);'? – DeeV

Répondre

4

sensorMgr est null lorsque vous atteignez onResume(), puisque vous le définissez de force sur null dans votre méthode onPause(). Réinitialiser sensorMgr (getSystemService(...)) avant d'appeler registerListener().

+0

Oui parfait merci. Je ne sais pas pourquoi je ne l'ai pas reconnu en premier lieu. Peut-être que je regarde le code trop longtemps? haha. – FeralShadow

Questions connexes