Comment gérer les Dynamiques JSON en Rénovation?
Je suis l'aide de la rénovation mise en réseau efficace de la bibliothèque, mais je suis incapable de gérer les Dynamiques JSON qui contient le préfixe unique responseMessage
des modifications à object
au hasard, le même préfixe ( responseMessage
) modifications apportées à la Chaîne dans certains cas (dynamiquement).
Format Json Objet de responseMessage:
{
"applicationType":"1",
"responseMessage":{
"surname":"Jhon",
"forename":" taylor",
"dob":"17081990",
"refNo":"3394909238490F",
"result":"Received"
}
}
responseMessage
Format Json dynamique des changements de type de chaîne:
{
"applicationType":"4",
"responseMessage":"Success"
}
Mon problème est que depuis rétrofit est intégré dans JSON
de l'analyse, je céder simple POJO par demande! mais le RESTE de l'API malheureusement, est construit sur la dynamique JSON
réponses. Le préfixe va changer de chaîne pour objet de façon aléatoire dans les deux succès(...) et l'échec(...) méthodes!
void doTrackRef(Map<String, String> paramsref2) {
RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint("http://192.168.100.44/RestDemo").build();
TrackerRefRequest userref = restAdapter.create(TrackerRefRequest.class);
userref.login(paramsref2,
new Callback<TrackerRefResponse>() {
@Override
public void success(
TrackerRefResponse trackdetailresponse,
Response response) {
Toast.makeText(TrackerActivity.this, "Success",
Toast.LENGTH_SHORT).show();
}
@Override
public void failure(RetrofitError retrofitError) {
Toast.makeText(TrackerActivity.this, "No internet",
Toast.LENGTH_SHORT).show();
}
});
}
Pojo:
public class TrackerRefResponse {
private String applicationType;
private String responseMessage; //String type
//private ResponseMessage responseMessage; //Object of type ResponseMessage
//Setters and Getters
}
Dans le code ci-dessus POJO TrackerRefResponse.java préfixe responseMessage est string ou d'un objet de type responseMessage , nous pouvons créer de la POJO avec les ref variable avec le même nom (java l'essentiel 🙂 ) donc je suis à la recherche pour la même solution dynamique JSON
en Rénovation.
Je sais que c'est très facile, normal les clients http avec async tâche, mais ce n'est pas la meilleure pratique dans le RESTE de l'Api JSON
analyse! en regardant la performance Repères toujours de Volley ou de Rénovation est le meilleur choix, mais je suis échoué poignée dynamique JSON
!
Solution Possible je Sais
-
Utiliser de vieux asyc tâche avec un client http de l'analyse. 🙁
-
Essayer de convaincre le RESTapi backend developer.
-
Créer des Rénovations client 🙂
Vous devez vous connecter pour publier un commentaire.
La fin de la partie, mais vous pouvez utiliser un convertisseur.
Puis vous utilisez une classe statique qui implémente rénovation du Convertisseur:
J'ai écrit cet exemple de convertisseur de sorte qu'il renvoie la réponse Json soit en tant que String, Object, JsonObject ou Map< String, Object >. Évidemment pas tous les types de retour de travail pour chaque Json, et il y a certainement place à l'amélioration. Mais il montre comment utiliser un Convertisseur pour convertir presque n'importe quel réponse à la dynamique de Json.
RestAdapter
cet exemple est pour le Retrofit 1. Comment voulez-vous mettre en œuvre le même convertisseur en Rénovation 2?RestClient.java
YourClass.java
Vous devez mettre en œuvre "checkResponseMessage" la méthode.
Essayer personnalisé deserialisation à l'aide de
gson-converter
comme ci-dessous(mise à jour de la réponse de Rénovation 2.0)Créer trois modèles comme indiqué ci-dessous
ResponseWrapper
ResponseMessage
ResponseString
UserResponseDeserializer(personnalisé deserialiser)
Rénovation 2.0 Mise En Œuvre
Bibliothèques Utilisées
***** Précédente Réponse (réponse ci-dessus est plus recommandé) *****
Changer votre pojo comme ce
et changement de rénovation du onResponse comme ce
vous pouvez également vérifier ce post pour plus de détails sur la dynamique de parsing json
Object
de type inconnu est bon. MerciL'un de vos solutions de travail. Ce que vous pouvez également faire est d'envoyer la Rénovation de l'api de l'interface de type de retour de réponse. Avec la réponse que vous obtenez un corps
Inputstream
qui vous permet de convertir un Objet JSON et de lire que vous voyez l'ajustement.Regardez: http://square.github.io/retrofit/#api-declaration - en vertu de RÉPONSE TYPE d'OBJET
Mis à jour
Rénovation 2 est sorti aujourd'hui et, avec elle, certains changements de la documentation et de la bibliothèque.
Regarder http://square.github.io/retrofit/#restadapter-configuration il y a de la demande et le corps de la réponse de l'objet qui peut être utilisé.
La accepté de répondre semblait plus compliqué pour moi, je le résoudre de cette façon:
C'est juste un exemple dans une tentative pour vous montrer comment vous pouvez utiliser différents modèles.
La variable
isEmail
est juste un booléen pour votre condition pour utiliser le modèle approprié.Je sais que je suis très très en retard à la fête. J'ai eu un problème similaire et vient d'être résolu comme ceci:
J'ai littéralement changé de type d'Objet. J'ai choisi cette approche car un seul champ dans la réponse a été dynamique (pour moi, ma réponse a été de façon plus compliqué), donc à l'aide d'un convertisseur aurait rendu la vie difficile. Utilisé Gson de travailler avec l'Objet à partir de là, en fonction de si c'était une Chaîne ou un Tableau de valeur.
Espère que cela aide quelqu'un à la recherche d'une réponse simple :).
Si il n'était pas possible de changer l'API principale, je considère les variantes suivantes (si Gson est utilisé pour convertir en JSON).
Nous pouvons utiliser Gson les cartes de type pour créer une coutume adaptateur pour
ResponseMessage
type de dynamique qui décide de la manière d'analyser le inoming JSON (en utilisant quelque chose commeif (reader.peek() == JsonToken.STRING)
).Mettre quelques méta-données décrivant le type de réponse dans un en-tête HTTP et l'utiliser pour déterminer quel type d'information doit être nourri à Gson instance.
En plus de ce que vous avez dit -
Utiliser Le Callback
Ensuite, vous pouvez récupérer les champs de l'utilisation de la méthode get.
Pour plus d'informations, allez à travers la javadoc de gson.
http://google-gson.googlecode.com/svn/tags/1.2.3/docs/javadocs/com/google/gson/JsonObject.html
J'ai trop couru de cette question.
mais je ne sais pas si cela a été votre cas , (je suis en utilisant Retrofit2)
sur mon cas, j'ai besoin de gérer l'erreur, et les messages de réussite.
Sur Le Succès
En Cas D'Erreur,
pour cela, j'ai juste créé un autre POJO
Error
,Error.java
ValidateUser.java
dans le cas ci-dessus, si le
result
clé sur json contient data1,data2, puis leValidateUserResult.java
obtenir initialisé.si erreur alors la
Error.java
classe de l'initialisation.