2017-10-03 1 views
0

Je veux obtenir la valeur de la "FullName" clé de cette réponse JSON:Gson ne reçoit pas la valeur de chaîne complète

{ 
    "Succeeded": true, 
    "DebugError": "", 
    "SystemUser": { 
     "ID": 94, 
     "FullName": "John Smith", 
     "Email": "[email protected]", 
     "PhoneNumber": "0000000000", 
     "Country": "USA" 
    } 
} 

Dans la méthode onResponse Je l'ai fait:

// code.. 

    @Override 
    public void onResponse(JSONObject response) { 
    Gson gson = new Gson();    
    JsonReader reader = new JsonReader(new StringReader(response.getJSONObject("SystemUser").get("FullName").toString())); 
    reader.setLenient(true); 
    String name = gson.fromJson(reader, String.class); 

    Log.i( " name: ", name + ""); 
    // I tried to use getString("FullName") but shows the same result. 

    } 

// code.. 

La valeur de Logcat est =>name: John

Pourquoi n'a pas imprimé le nom complet (John Smith) ??

+0

Sur votre modèle, utilisez '/' pour la lecture de chaîne, par ex. "SystemUser {" + "FullName =" + Nom complet + '\' '+ "ID =" + ID + ..... –

Répondre

0

Plutôt que de procéder de cette façon, vous pouvez opter pour une meilleure approche. La plupart des applications ont des structures json complexes, pour lesquelles cette approche n'est pas recommandée.

Créez une classe de modèle en copiant l'échantillon JSON à jsonschema2pojo. Maintenant, sélectionnez la langue cible: Java, style Annotation: Gson

Téléchargez ou copiez coller la classe de modèle généré et utiliser les éléments suivants (En supposant que votre nom de classe comme UserDetails).

UserDetails userDetails = gson.fromJson(response.toString(), UserDetails.class); 

La classe de modèle est maintenant remplie avec toutes les valeurs. Récupérez ce que vous voulez.

REMARQUE:Les noms de variable et de classe interne doivent être identiques à la structure JSON. Mieux utiliser l'annotation. Sinon, la classe du modèle ne sera pas correctement renseignée

+0

J'utilise l'approche du modèle pour toutes mes autres demandes, mais j'ai pensé que dans ce cas, je ne veux qu'une seule valeur, donc un modèle de classe entière ne sera pas nécessaire. –

1

On dirait que votre implémentation GSON est redondante. Il suffit d'utiliser

response.getJSONObject("SystemUser").getString("FullName") 
+0

J'ai ajouté un commentaire dans le code qui dit que j'ai essayé ceci et cela n'a pas résolu le problème. –

+2

Confirmez votre réponse JSON consignant 'response.toString()'. Il semble que la réponse soit différente. –

+0

il est déjà imprimé dans la question, c'est la réponse! –