2017-09-07 17 views
0

J'ai créé une application qui aide les utilisateurs à se connecter à un serveur en ligne à l'aide d'API. J'utilise retrofit pour m'aider à faire des appels réseau au serveur. Bizarrement, certains appareils comme les tablettes et les applications comme les piles bleues obtiennent une exception de pointeur nul lorsque la réponse du serveur est nulle. Veuillez m'aider à corriger l'exception du pointeur nul. NB: Il y a tellement de questions sur l'exception Pointeur nul, mais aucune n'est adaptée à ma question.Exception Nullpointer sur la réponse du serveur

Ceci est mon code ci-dessous

public void loginUser(String userName, String userPassword, Boolean userRememberMe) { 

    Retrofit retrofit = RetrofitClient.getClient(authUser.getToken()); 
    APIService mAPIService = retrofit.create(APIService.class); 


    final ProgressDialog loading = ProgressDialog.show(this, "Please Wait", "...", false, false); 
    loading.show(); 

    mAPIService.loginUser(userName, userPassword, userRememberMe).enqueue(new Callback<LendingResponse>() { 
     @Override 
     public void onResponse(Response<LendingResponse> response, Retrofit retrofit) { 
      if(response.isSuccess()) { 

       String userId = response.body().getData().getId(); 
       String userName = response.body().getData().getUsername(); 
       String name = response.body().getData().getName(); 
       String phoneNumber = response.body().getData().getPhoneNumber(); 
       String email = response.body().getData().getEmail(); 
       String token =response.body().getData().getToken(); 
       String gender = response.body().getData().getGender(); 


       loading.dismiss(); 
      } 
     } 

     @Override 
     public void onFailure(Throwable throwable) { 
      Log.e(TAG, throwable.getMessage()); 
      Toast.makeText(LoginActivity.this, "Unable to Login", Toast.LENGTH_SHORT).show(); 
      loading.dismiss(); 
     } 
    }); 
} 

Ceci est mes journaux d'erreur du magasin de jeu ci-dessous:

java.lang.NullPointerException: 

at com.jonathan.lendingsquare.auth.LoginActivity$3.onResponse (Unknown Source) 

at retrofit.ExecutorCallAdapterFactory$ExecutorCallback$1.run (Unknown Source) 

at android.os.Handler.handleCallback (Handler.java:733) 

at android.os.Handler.dispatchMessage (Handler.java:95) 

at android.os.Looper.loop (Looper.java:136) 

at android.app.ActivityThread.main (ActivityThread.java:5001) 

at java.lang.reflect.Method.invokeNative (Native Method) 

at java.lang.reflect.Method.invoke (Method.java:515) 

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:793) 

at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:609) 

at dalvik.system.NativeStart.main (Native Method) 
+0

Vérifiez votre réponse API avec la même demande sur le client de repos Web comme Postman. Gérez l'exception avec try-catch sur la réponse en tant que bloc de code toujours sujet aux exceptions. – ADM

+0

@AMD cela fonctionne avec le corps du message de facteur n'est jamais null..il est juste étrange que j'obtiens des messages nuls lorsque vous utilisez des piles bleues ... entourer ce bloc de code avec try catch –

+0

Vérifiez la classe de modèle que vous affectez à la modification. Il doit y avoir un problème d'analyse. – ADM

Répondre

0

juste vérifier la valeur null ou non:

if (!(signUp_jsonObject.isNull(response.body().getData().getId()))) 
{ 
    String userId = response.body().getData().getId(); 
} 
+0

'if (! SignUp_jsonObject.isNull (response.body(). GetData(). GetId()))' est suffisant (parenthèses enlevées) –

+0

@DanielAlder Cela dépend totalement de votre réponse. Dans mon code, je vérifie généralement 2 things La clé existe et la valeur associée à cette clé est nulle ou non. si (jsonObject.has ("existe")) { if (! (JsonObject.isNull ("existe"))) { ----- }} – yash786

+0

Je ne comprends pas ce que vous signifier. Je disais seulement que 'si (! (Bool))' et 'if (! Bool)' sont les mêmes –

2

Supprimer le dialogue de progression pour le tester.

Autre contrôle sage suivant nul ou non

booléen mSuccess = false;

   if (response.isSuccessful()) 

        if (response.body() != null) 

         if(response.body().getStatus().getSuccess().equalsIgnoreCase(Constants.getInstance().True)) 

          mSuccess = true; 

       if (mSuccess) { 

        //your code`enter code here` 
       } 
+0

quelle est cette ligne recherchant if (response.body(). GetStatus(). GetSuccess(). EqualsIgnoreCase (Constants.getInstance(). True)) –

+0

Cette vérification de ligne pour vous réponse à l'API succès vrai ou faux ou sinon 1 ou 0 tout ce que nous obtenons résultat – mehul