length - object java android
findViewById() puede producir NullPointerException (3)
Tengo muchas de estas llamadas:
(ListView) getView().findViewById(R.id.main_list_view);
(TextView) getView().findViewById(R.id.items_no);
....
y AndroidStudio me dice que pueden autorizar una NullPointerException
:
Invocación del método
getView().findViewById(R.id.main_list_view)
puede producirjava.lang.NullPointerException
menos ... (Ctrl + F1)Esta inspección analiza el control del método y el flujo de datos para informar las posibles condiciones que siempre son verdaderas o falsas, las expresiones cuyo valor está comprobado estáticamente como constante y las situaciones que pueden conducir a violaciones del contrato de anulabilidad.
Las variables, los parámetros del método y los valores de retorno marcados como
@Nullable
o@NotNull
se consideran@NotNull
(o no nulo, respectivamente) y se utilizan durante el análisis para verificar los contratos de nulabilidad, por ejemplo, informar posibles errores deNullPointerException
.Los contratos más complejos se pueden definir usando la anotación
@Contract
, por ejemplo:
@Contract("_, null -> null")
- el método devuelve null si su segundo argumento es nulo@Contract("_, null -> null; _, !null -> !null")
- el método devuelve null si es el segundo argumento es nulo y no nulo de lo contrario
@Contract("true -> fail")
- un método típico deassertFalse
que arroja una excepción si se le pasa verdaderoLa inspección se puede configurar para usar anotaciones
@NotNull
@Nullable
personalizadas (por defecto se usarán las de anotaciones.jar)
Afortunadamente, todo funciona, pero ¿hay alguna mejora en este código que puedo hacer?
Debes ignorar el problema;
Como @DanDar3 escribió -> getView () puede devolver nulo y AndroidStudio lo resalta.
Pero si realmente quieres hacer que AndroidStudio sea feliz, seguro que puedes ...
Solo afirmar vista no es nulo:
View view = getView();
assert view != null;
(ListView) view.findViewById(R.id.main_list_view);
(TextView) view.findViewById(R.id.items_no);
Eso es porque getView()
puede devolver nulo y se anota como @Nullable
, verifica las fuentes y su JavaDoc - CTRL + Haga clic en la llamada a getView () en su código.
/**
* Get the root view for the fragment''s layout (the one returned by {@link #onCreateView}),
* if provided.
*
* @return The fragment''s root view, or null if it has no layout.
*/
@Nullable
public View getView() {
return mView;
}
Puede envolver su código usted mismo y verificar que null tenga la advertencia desaparece, o colocar el cursor en cualquier lugar dentro de la llamada findViewById (), esperar unos segundos para que se muestre la bombilla (o presionar Alt + Enter) y luego elegir uno de las soluciones sugeridas.
Este es un problema conocido en android.support.v7.app.AppCompatActivity y se ha corregido en v24.
https://code.google.com/p/android/issues/detail?id=203345
No tendrá ningún problema con android.support.v4.app.FragmentActivity o android.app.Activity