ich Retrofit eine Antwort von dem API erhalten verwendet, um mehr Typ-Reaktionen zu handhaben, aber ich habe verschiedene Arten von Antwort von dem gleichen API, wie dieserWie von einem Server durch Nachrüstung
- JsonObject
- String Typ
- Boolean Typ
Basierend auf der Situation, gibt es verschiedene Arten von Antworten aus der gleichen API.
Ich habe versucht, diesen Code zu verwenden:
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());
}
});
Hier hielt ich den Rückgabetyp als „JSONObject“ in dem Aufruf zurück und umgewandelt in eine String und geprüft, ob es sich um eine JsonObject oder war boolean oder String und führen Sie die entsprechenden Aktionen aus.
Aber ich habe diese Ausnahme, während die Antworten der Handhabung:
Antwort:
com.google.gson.JsonSyntaxException:Expected a com.google.gson.JsonObject but was com.google.gson.JsonPrimitive
Kann mir jemand empfehlen, wie diese Antworten in einzelnen Art von Rückruf bei Nachrüstungen behandeln?
Wenn ich einen String-Typ als Callback wie folgt verwendet:
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());
}
});
}
ich diese Störung erhalte:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $
wenn ich Rückruf verwenden, wenn ich JsonObject wollen: es gibt die follwing Fehler com .google.gson.JsonSyntaxException: java.lang.IllegalStateException: Erwartete eine Zeichenfolge, aber war BEGIN_OBJECT in Zeile 1 Spalte 2 Pfad $ .... Wenn ich Callback verwenden möchte, wenn ich "String" will gibt es ---> com .google.gson.JsonSyntaxException: java.lang.IllegalStateException: Erwartete eine Zeichenfolge, war aber BEGIN_OBJECT in Zeile 1 Spalte 2 Pfad $ ----> Ich weiß nicht, wie boolesche Antwort zu behandeln –
uma
Sie sollten nur Retrofit ** mit dem Gson-Konverter ** verwenden, wenn Sie * immer * erhalten eine JSON-Antwort –
Related: https: //stackoverflow.com/questions/32617770/how-to-get-response-as-string-using-retrofit-without-using-gson-or-an-any-other-lib –