Retrofit 2: Obtenir JSON du corps de la réponse
Je veux obtenir de la chaîne json de mon api à l'aide de rénovation 2, je n'ai aucun problème lors de l'utilisation de rénovation 1 pour obtenir de l'json, mais à l'aide de rénovation 2 renvoie null pour moi.
C'est ce que mon json ressemble
{"id":1,"Username":"admin","Level":"Administrator"}
C'est mon API
@FormUrlEncoded
@POST("/api/level")
Call<ResponseBody> checkLevel(@Field("id") int id);
C'est comment mon code ressemble à
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Config.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
Api api = retrofit.create(Api.class);
Call<ResponseBody> call = api.checkLevel(1);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
JsonObject post = new JsonObject().get(response.body().toString()).getAsJsonObject();
if (post.get("Level").getAsString().contains("Administrator")) {
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
Je suis nouveau à rénover 2 et en utilisant le code ci-dessus, ca fait toujours mes applications de crash car response.body().toString()
renvoie la valeur null.
Merci de me guider sur la façon d'obtenir que la chaîne json afin que je puisse le convertir en JsonObject.
source d'informationauteur Dirus
Vous devez vous connecter pour publier un commentaire.
Utiliser cette lien pour convertir votre JSON dans POJO avec sélectionnez options sélectionnées dans l'image ci-dessous
Vous obtiendrez une classe POJO pour votre réponse, comme ce
et l'utilisation de l'interface comme ceci:
et de l'appeler comme ceci:
et d'utilisation des dépendances dans gradale
REMARQUE: L'erreur se produit parce que vous avez changé votre JSON dans POJO (par l'utilisation de
addConverterFactory(GsonConverterFactory.create())
en rénovation). Si vous voulez la réponse en JSON puis retirez leaddConverterFactory(GsonConverterFactory.create())
de Rénovation. Si non, alors utiliser la solution ci-dessusSi vous souhaitez obtenir de réponse complète au format JSON, essayez ceci:
J'ai essayé une nouvelle façon d'obtenir de l'ensemble de la réponse du serveur au format JSON sans créer de modèle de classe. Je ne suis pas à l'aide de n'importe quel modèle de classe pour obtenir des données à partir du serveur parce que je ne sais pas quelle réponse je vais ou il peut changer selon les besoins.
c'est la réponse JSON:
Dans votre interface de l'API modifier le paramètre
dans votre activité principale où vous êtes à l'appel de cette
après cela, vous pouvez normalement obtenir paramètre à l'aide d'objet JSON et tableau JSON
De sortie
l'utiliser pour obtenir la Chaîne de
au lieu de
et de toujours garder un vérifier la valeur null avant de convertir responsebody à chaîne
ajouter de la dépendance retrofit2
créer une classe pour l'url de base
après que créer une classe de modèle pour obtenir la valeur
créer l'interface de la classe
après que, dans la classe principale
Donc voici l'affaire:
Lors de la prise de
Vous êtes de passage à GsonConverterFactory.créer() ici. Si vous faites comme cela, Gson sera automatiquement convertir l'objet json que vous obtenez en réponse à votre objet
<ResponseBody>
. Ici, vous pouvez passer tous les autres convertisseurs tels que Jackson, etc...Une meilleure approche est de laisser Rénovation de générer des POJO pour vous à partir du json (à l'aide de
gson
). Première chose à faire est d'ajouter.addConverterFactory(GsonConverterFactory.create())
lors de la création de votreRetrofit
instance. Par exemple, si vous avez eu uneUser
classe java (comme illustré ci-dessous) qui correspondent à votre json, votre rénovation de l'api pourrait revenirCall<User>
utiliser cette