je retrofit pour obtenir une réponse de l'API, mais j'ai différents types de réponse de la même API, comme ceux-ciComment gérer plusieurs réponses de type à partir d'un serveur via mise à niveau
- JsonObject
- cordes tapez
- type booléen
sur la base de la situation, il donne différents types de réponses de la même API.
J'ai essayé d'utiliser ce code:
serverUtilities.getBaseClassService(getApplicationContext(), "").forgotPasswordSecurityAnswerCheck(in, new Callback<JsonObject>() {
@Override
public void success(JsonObject s, retrofit.client.Response response) {
Log.d("forgot_password_respons", "--->" + "" + s.toString());
/* to retrieve the string or integer values*/
if (s.toString().equals("5")) {
utilities.ShowAlert("selected wrong question", "Forgot Password SecQues");
}
if (s.toString().equals("1")) {
// some alert here
}
/* to retrieve the boolean values*/
if (s.toString().equals("false")) {
utilities.ShowAlert(getResources().getString(R.string.otp_fail), "Forgot Password SecQues");
}
if (s.toString().equals("1")) {
utilities.ShowAlert("Email already registered", "Social Registration");
}
/*to retrieve the Json object*/
else
if (s.toString().charAt(0) == '{') {
Log.d("my_first_char", "" + s.toString().charAt(0));
try {
if (s.toString().contains("memberId")) {
String MemberId = s.get("memberId").getAsString();
String optId = s.get("otpId").getAsString();
Log.d("Forgot_pass_ques_act", "" + MemberId + "--->" + optId);
Singleton.setSuccessId(MemberId);
Singleton.setOptId(optId);
Intent intent = new Intent(ForgotPasswordQuestionActivity.this, PasswordActivity.class);
startActivity(intent);
Toast.makeText(ForgotPasswordQuestionActivity.this, "congrats!! second step Success ", Toast.LENGTH_SHORT).show();
} else if (s.toString().contains("mId")) {
}
} catch (Exception e) {
utilities.ShowAlert(e.getMessage(), "forgot passwordQues(catch)");
Log.d("forgot_password_error", "" + e.getMessage());
}
// Singleton.setSuccessId(s);
}
}
@Override
public void failure(RetrofitError error) {
utilities.ShowAlert(error.getMessage(), "forgot passwordQues(server)");
Log.d("forgot_passwo_secAnser", "--->" + error.getMessage());
}
});
Ici, je gardais ce type de retour comme « JSONObject » dans l'appel arrière et converti en une chaîne et vérifié si elle était un JsonObject ou booléen ou Chaîne et d'effectuer les actions liées à cela.
Mais je suis arrivé cette exception lors de la manipulation des réponses:
Réponse:
com.google.gson.JsonSyntaxException:Expected a com.google.gson.JsonObject but was com.google.gson.JsonPrimitive
Quelqu'un peut-il me suggérer comment gérer ces réponses en un seul type de rappel en rénovation?
Si j'ai utilisé un type de chaîne comme un rappel comme celui-ci:
server_utilities.getBaseClassService(getApplicationContext(), "").forgotPasswordResponse(in, new Callback<String>() {
@Override
public void success(String s, retrofit.client.Response response) {
Log.d("forgot password resp", "--->" + "" + s.toString());
}
@Override
public void failure(RetrofitError error) {
Log.d("forgot_password_error", "--->" + error.getMessage());
}
});
}
Je reçois cette erreur:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $
si je vais utiliser Callback quand je veux JsonObject: il donne l'erreur follwing com .google.gson.JsonSyntaxException: java.lang.IllegalStateException: Attendu une chaîne mais était BEGIN_OBJECT à la ligne 1 colonne 2 chemin $ .... si je vais utiliser le rappel quand je veux "String" il donnera ---> com .google.gson.JsonSyntaxException: java.lang.IllegalStateException: attendait une chaîne mais était BEGIN_OBJECT à la ligne 1 colonne 2 chemin $ ----> je ne sais pas comment gérer la réponse booléenne –
uma
Vous devriez utiliser seulement Retrofit ** avec le convertisseur Gson ** si vous * toujours * obtenir une réponse JSON –
Connexes: https: //stackoverflow.com/questions/32617770/how-to-get-response-as-string-using-retrofit-without-using-gson-or-any-other-lib –