java - problem - findViewById() peut produire NullPointerException



help android studio (2)

C'est parce que getView() peut retourner null et est annoté comme @Nullable , vérifiez les sources et son JavaDoc - CTRL + clic sur l'appel getView () dans votre code.

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

Vous pouvez envelopper votre code vous-même et vérifier que l'avertissement disparaît, ou placer le curseur n'importe où dans l'appel findViewById (), attendre quelques secondes que l'ampoule apparaisse (ou appuyer sur Alt + Entrée), puis en choisir une des solutions proposées.

https://src-bin.com

J'ai plusieurs de ces appels:

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

AndroidStudio m'indique qu'ils peuvent générer une exception NullPointerException :

Invocation de méthode getView().findViewById(R.id.main_list_view) peut produire java.lang.NullPointerException moins ... (Ctrl + F1)

Cette inspection analyse le contrôle des méthodes et le flux de données pour signaler les conditions possibles qui sont toujours vraies ou fausses, les expressions dont la valeur est prouvée statiquement constante et les situations pouvant entraîner des violations de contrat de nullité.

Les variables, les paramètres de méthode et les valeurs de retour marqués comme @Nullable ou @NotNull sont traités comme nullable (ou non-nul, respectivement) et utilisés lors de l'analyse pour vérifier les contrats de nullité, par exemple signaler les erreurs NullPointerException possibles.

Des contrats plus complexes peuvent être définis à l'aide de l'annotation @Contract , par exemple:

@Contract("_, null -> null") - méthode renvoie null si son second argument est null @Contract("_, null -> null; _, !null -> !null") - méthode retourne null si sa seconde l'argument est nul et non nul sinon

@Contract("true -> fail") - une méthode assertFalse typique qui lève une exception si true lui est passé

L'inspection peut être configurée pour utiliser les annotations personnalisées @Nullable @NotNull (par défaut celles d'annotations.jar seront utilisées)

Heureusement, je travaille toujours, mais y a-t-il une amélioration à ce code?






inspection