En Java, si un puntero nulo sucede muy raramente es mejor usar catch en lugar de if
Limpiar algunos sueltos en mis aplicaciones de Android Encontré una excepción de puntero nulo en la consola de desarrolladores que nunca sucedió y supongo que es una condición de carrera rara.
Para aquellos que no saben: Android permite al usuario reportar fallos (excepción iE uncaught) de nuevo al desarrollador.
- PreferenceFragment.findPreference devuelve siempre NULL
- Fragmentos androides getArguments () return null
- RecyclerView ViewPager java.lang.NullPointerException android.support.v7.widget.RecyclerView $ ItemAnimator $ ItemHolderInfo.left
- Cómo rectificar NullPointerException en v4.DrawerLayout?
- Android ActivityOptions.isReturning () NullPointerException
Ya comencé a escribir el infame if (… != null)
cuando se me ocurrió: Sólo hay tres informes. Así ocurre muy raramente.
Así que me pregunto: En esta situación, y el rendimiento sabio: ¿No sería mejor para capturar la excepción puntero nulo en su lugar?
Considerando que el if será evaluado cada vez.
- item.getIcon () SIEMPRE NULL
- Android.view.InflateException: Línea de archivo XML binario # 28: Error al inflar fragmento de clase
- Android: getContext (). GetContentResolver () a veces obtiene NullPointerException
- NullPointerException: Intenta invocar el método virtual 'boolean java.lang.String.equalsIgnoreCase (java.lang.String)' en una referencia de objeto nulo
- NullPointerException en android.content.ContextWrapper
- ¿Por qué obtengo NullPointerException cuando uso setCurrentText o setText para TextSwitcher?
- Excepción de puntero nulo al utilizar SearchView con AppCompat
- Error al analizar el contenido de Android sdk e inicializar herramientas java en eclipse
No para sonar como una persona fanática o estrecho de mente, pero creo firmemente NPE nunca debe ser permitido que ocurra en el primer lugar ! La captura de NPE es una práctica muy mala en mi opinión. Esto significa que no está completamente enterado de cómo está funcionando su código.
Lo primero que debe hacer siempre antes de usar alguna entrada es comprobar si hay nulo.
¿Con qué frecuencia es "cada vez"? ¿Una vez por carga? ¿Cada minuto? 1000 veces por segundo?
En cualquier caso, una prueba para obj == null
es tan barata una operación como se puede obtener, y ciertamente más barato que la manipulación de excepciones.
Y una excepción de puntero nulo nunca debe suceder – que necesitan ser entendidos y evitados. Si usted no sabe por qué está sucediendo, eso necesita ser arreglado.
Se deben usar excepciones para manejar casos excepcionales. Es decir, si se espera que el valor sea nulo, entonces es razonable comprobarlo en lugar de capturar la excepción. No puedo pensar en ningún ejemplo donde la captura de una NullPointerException
sería mejor que manejarlo en el flujo de control normal.
Si es una condición de racha multiproceso podría ser posible que la variable se está inicializando y luego poner a null de nuevo? Si es así, el "if (…! = Null)" podría pasar y entonces aparecería una excepción.
Yo usaría el try catch para ser seguro (las excepciones no manejadas del puntero nulo son algo que debería evitarse), sino también tratar de encontrar la condición de carrera y si es posible o manejable dentro de una cantidad superviseable de tiempo arreglar o manejar eso.
También puede esperar unos pocos ms y volver a intentarlo durante un determinado número de veces si aparece una excepción para evitar la condición de carrera (no es muy bonita pero funciona).
Encontré una excepción de puntero nulo en la consola de desarrolladores que nunca pasó a ser y mi conjetura es una condición de carrera rara
Eso suena como un error y sólo la captura de la excepción suena como que la intención de ignorar el error en lugar de arreglarlo. Averigüe de dónde vienen estos valores nulos y arreglarlo, no deje que los punteros nulos se propaguen al código que no puede ocuparse de ellos.
- agregar vista (vista de texto) en AsyncTask
- Barra de acción de Android: deshabilita el menú de opciones