Я использую Retrofit, и я хочу получить доступ к ответу JSON, который возвращается с сервера. Может кто-нибудь, пожалуйста, посоветуйте мне. СпасибоМодернизация Как отпечатать ответ JSON
ответ
, если вы хотите видеть только ответы для целей отладки, просто включите отладку в модификации и посмотрите журнал. Это что-то вроде:
restAdapter.setDebuggingEnabled(true);
Если вам нужен доступ к прямой реакции в коде все время, вы должны делать это на уровне HTTPClient, как это в основном минуя цель модернизации
Чтобы напечатать объект ответа сначала меняет тип объекта обратного вызова на общий тип объекта через Callback<Object> cb
. Затем в своем обратном вызове вы можете просто зарегистрировать объект для печати форматированной версии Json на консоли.
@Override
public void success(Object o, Response response) {
Log.i("Tag", "Login data " + o.toString());
}
Чтобы напечатать объект запроса вы можете использовать любой Json библиотеки вы используете (здесь я использую Gson) сериализовать объект запроса к Json и войти, что консоль.
Log.i("Tag", "Request data " + new Gson().toJson(requestObject));
Я получаю эту ошибку, поэтому она никогда не попадает в функцию успеха и не переходит в неисправную функцию. Есть предположения? com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидается BEGIN_OBJECT, но BEGIN_ARRAY –
Попробуйте использовать список объектов вместо – MrEngineer13
Я пробовал, но все равно получаю сообщение об ошибке. См. Этот вопрос: http://stackoverflow.com/questions/25817604/retrofit-convert-array-of-objects-to-gson-error/25819168#25819168 –
Вам нужно получить ответ в строчном формате, а затем проанализировать данные с помощью gson. Чтобы получить ответ со строкой, вы можете использовать CustomStringConverter, расширив преобразователь retrofit.converter.Converter или просто получив входной поток от ответа на результат успеха.
public void success(Response r1, Response r2) {
IntputStream in = r1.getBody().in()
//convert this inputstream to string
}
Если вы хотите использовать полную мощность модернизированного и сохранить необработанный ввод для себя (например, чтобы сохранить его в упорном кэше), вы можете расширить конвертер, например,
RestAdapter restAdapter = new RestAdapter.Builder()
.setConverter(new GsonConverter(gson) {
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException {
try {
byte[] buffer = new byte[body.length()];
body.in().read(buffer);
body.in().reset();
}
catch (IOException e) {
throw new ConversionException(e);
}
return super.fromBody(body, type);
}
})
...build();
ResponseInterface ri = restAdapter.create(ResponseInterface.class);
Вы также можете войти результат, как этот
mRestAdapter = new RestAdapter.Builder()
.setEndpoint(getBaseUrl())
.setLogLevel(RestAdapter.LogLevel.FULL) //Log the result
.build();
Это то, что я искал. Я обновил фрагмент кода, чтобы использовать надлежащие методы для выхода из системы «Дооснащение». Все ваши ответы правильные, так что спасибо всем. –