Nullpointerexception cuando compruebo para el servicio corriente en la prueba de Roboelectric

Recibo un NPE cuando ejecuto una prueba en una actividad cuyo método onCreate () comprueba si se está ejecutando un servicio en particular. En el método de configuración de la prueba, llamo a:

ActivityController<MyActivity> ac = Robolectric.buildActivity(MyActivity.class).create(); mActivity = ac.get(); 

En el método onCreate () de la actividad, llamo isServiceRunning ()

 ActivityManager manager = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE); if(manager != null) { for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { if (service.service != null && "MyService".equals(service.service.getClassName())) { return true; } } } return false; 

Se produce un error con NPE cuando ejecuta esto:

 for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) 

Manager no es nulo, pero el NPE se activa en ActivityManager.getRunningServices (int) en la biblioteca de android.

¿Qué debo hacer si necesito este método para pasar? Yo estaba usando Roboeléctrico 2.2-20130612.001729-6-jar-with-dependencies.jar pero veo el problema ahora, incluso con la última versión.

Yo estaba usando SDK android versión 19, pero ahora cambió a 18 y todavía veo el problema.

¿Algunas ideas?

Rastro de la pila:

 java.lang.NullPointerException at android.app.ActivityManager.getRunningServices(ActivityManager.java:1106) at com.example.MyActivity.isServiceRunning(MyActivity.java:151) at com.example.MyActivity.onCreate(MyActivity.java:43) at android.app.Activity.performCreate(Activity.java:5133) at org.fest.reflect.method.Invoker.invoke(Invoker.java:112) at org.robolectric.util.ActivityController$1.run(ActivityController.java:116) at org.robolectric.shadows.ShadowLooper.runPaused(ShadowLooper.java:257) at org.robolectric.util.ActivityController.create(ActivityController.java:111) at org.robolectric.util.ActivityController.create(ActivityController.java:123) at com.example.test.MyActivityTest.setUp(MyActivityTest.java:44) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:233) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:174) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

Debe cambiar su sentencia if para que sea más inclusiva. Desde la documentación de Android sobre la función:
Nota: este método sólo está diseñado para depurar o implementar interfaces de usuario de tipo de gestión de servicios.

Por lo tanto, yo recomendaría tener mucho cuidado con sus cheques nulos (nota el plural). El orden siguiente es importante o puede recibir el puntero nulo en el condicional de la instrucción if .

  1. Asegúrese de que el administrador no es nulo y luego
  2. Asegúrese de que la Lista <> no es nulo y luego
  3. Asegúrese de que no esté vacío.
    (Gran diferencia entre nulo y vacío, ex: no podemos ejecutar la función. IsEmpty () en una lista nula).

if(manager != null && manager.getRunningServices(MAX) != null && !manager.getRunningServices(MAX).isEmpty() != null)

Nota de lado: Sería más fácil leer que después del número de verificación 1 se guarda la lista de servicios a una variable y sólo tiene una segunda declaración if en esa variable y luego hacer su for each declaración dentro de la segunda declaración if .

  • WifiDirectActivity Alteración de la muestra: Transfiere un ArrayList <String> p2p
  • Editar escala de texto con selección
  • No se puede ejecutar el programa "\ ndk-build.cmd": Error al iniciar
  • Inicializar una aplicación de Android
  • Cómo registrar datos de Android Motion Sensors a una tasa fija
  • ¿Qué es "pools de asignación para objetos temporales"?
  • No se puede obtener la respuesta de OkHttp.body.toString () para devolver una cadena
  • Recurso Android de tipo largo
  • Anular un solo toque de Photoview
  • Crear gran Jar (escritorio) de android / escritorio gdx proyecto
  • ¿Es posible anular un método nativo en una clase Java en Android / dalvik?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.