2015-11-12 14 views
6

ho molte di queste chiamate:findViewById() può produrre NullPointerException

(ListView) getView().findViewById(R.id.main_list_view); 
(TextView) getView().findViewById(R.id.items_no); 
.... 

e Android Studio mi dice che essi possono, inerenti un NullPointerException:

Method Invocation getView().findViewById(R.id.main_list_view) possono produrre java.lang.NullPointerException meno .. . (Ctrl + F1)

Questa ispezione analizza il controllo del metodo e il flusso di dati per segnalare possibili condizioni che sono sempre vere o false, espressioni il cui valore è statisticamente dimostrato essere costante e situazioni che possono portare a violazioni del contratto nullability .

Variabili, parametri di metodo e valori restituiti contrassegnati come @Nullable o @NotNull sono trattate come annullabile (o non-nullo, rispettivamente) e utilizzati durante l'analisi per accertare contratti Nullability, ad esempio segnala possibili errori NullPointerException .

Ulteriori contratti complessi possono essere definiti utilizzando @Contract annotazione, ad esempio:

@Contract("_, null -> null") - metodo restituisce null se secondo argomento è nullo @Contract("_, null -> null; _, !null -> !null") - metodo restituisce null se secondo argomento è nullo e non nullo altrimenti

@Contract("true -> fail") - un tipico metodo di assertFalse che genera un'eccezione se vero è passato ad esso

L'ispezione può essere configurato utilizzare personalizzato @Nullable @NotNull annotazioni (per impostazione predefinita quelli di annotations.jar verranno utilizzati)

opere Fortunatamente Everithing, ma c'è un miglioramento di questo codice posso fatta?

+2

Vuoi scrivere codice che non può mai possibilmente attraverso un NPE ? – csmckelvey

+0

Stai usando un pattern ViewHolder? – SKT

+0

@takendarkk no, ma voglio capire perché ide mi dice che potrebbe succedere – Phate01

risposta

1

Ciò causa getView() può restituire null e viene annotato come @Nullable, controllare i sorgenti e il relativo JavaDoc - CTRL + Fare clic su chiamata getView() nel codice.

/** 
* 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; 
} 

Puoi avvolgere il codice voi stessi e verificare la presenza di null per avere l'avvertimento andare via, o comunque posizionare il cursore in qualsiasi punto all'interno findViewById() chiamata, attendere qualche secondo per la lampadina di presentarsi (o premere Alt + Invio) e quindi scegliere una delle soluzioni suggerite.

0

Il deve ignorare il problema;

Come @ DanDar3 ha scritto -> getView() può restituire null e AndroidStudio lo evidenzia.

Ma se si vuole veramente fare Android Studio felice - che si può ...:
Basta affermare vista non è nullo:

View view = getView(); 
assert view != null; 
(ListView) view.findViewById(R.id.main_list_view); 
(TextView) view.findViewById(R.id.items_no); 
Problemi correlati