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 ()
- Android: java.lang.Throwable: setStateLocked
- Comprobar la integridad de los activos de Android
- Android: cajón de navegación sin xml
- Crear Bitmap NullPointerException
- Android adecuada limpieza / eliminación
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)
- Realm.io notificaciones - ¿Cómo escuchar los cambios sólo en cierto cuadro?
- Uso de Quasar Fibers en la aplicación para Android
- No se puede agregar la cuenta de Google en Google App Emulator
- aceleración de hardware webview slide-in animación parpadeo en ICS
- Android simulacro de ubicación sin configuración de ubicación falsa (dispositivo con raíz)
- Gestión de devoluciones de llamada del servicio remoto
- No se puede implementar el módulo de backend de punto final de Cloud
- API de baja energía de Bluetooth en Java
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
.
- Asegúrese de que el administrador no es nulo y luego
- Asegúrese de que la Lista <> no es nulo y luego
- 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
.