2017-09-06 9 views
0

J'utilise Retroft et GSON pour analyser la réponse.Retrofit Android: Invocation de méthode 'getSuccess' peut produire 'java.lang.NullPointerException'

Mon code onResponse est comme ci-dessous

@Override 
     public void onResponse(@NonNull Call<ResultList> call, @NonNull Response<ResultList> response) { 

      if (response.isSuccessful()) { 

        if (response.body() != null && 
          response.body().getSuccess() == 1) { 
       ................ 

Je vérifie response.body() != null et aussi response.isSuccessful(). Encore je reçois un avertissement dans le studio Android sur la ligne response.body().getSuccess().

Comment éviter cet avertissement? J'utilise retrofit: 2.3.0 et gson: 2.8.1. J'ai déjà essayé la solution sur cette question (Retrofit Method invocation may produce 'java.lang.NullPointerException' ). Mais cela ne fonctionnait pas

+0

se réfèrent: https://stackoverflow.com/questions/45422911/retrofit-method-invocation-may-produce-java-lang-nullpointerexception –

+0

@ Bapusaheb Shinde: Je l'ai déjà essayé. Mais ça ne fonctionnait pas. Même avertissement – Ameer

Répondre

2

La méthode Response.body() est déclarée avec l'annotation @Nullable, ce qui signifie que sa valeur de retour peut être nulle. Vous devez vérifier que la valeur renvoyée n'est pas NULL avant d'appeler des méthodes si vous souhaitez éviter cet avertissement.

Votre question comprend ce code:

if (response.body() != null && response.body().getSuccess() == 1) 

On dirait que vous attendez que cela supprimer l'avertissement, mais il ne sera pas. C'est parce que le linter n'a aucun moyen de savoir que la seconde invocation de body() retournera la même valeur que la première invocation. Au lieu de cela, écrire ceci:

ResultList body = response.body(); 
if (body != null && body.getSuccess() == 1) { 
    ... 
}