Я использую последнюю версию retrofit2, v2.0.0-beta3. Ответ API - это либо объект пользователя, либо пустой ответ (нулевое значение). Если я отправлю правильное имя пользователя/пароль, тогда дескриптор переходит в метод onResponse с успешным объектом User. Но если вы отправляете неправильный пароль, тогда API ничего не вернет, с небольшими значениями в заголовках ответов. Но я получаю MalformedJsonException в onFailure (Throwable).как обработать ответ с помощью retrofit2 (v2.0.0-beta3)
"com.google.gson.stream.MalformedJsonException: Используйте JsonReader.setLenient (истина), чтобы принять искаженной JSON в строке 1 колонки 1 путь $"
Я думаю, что должно быть каким-то образом обработать нулевой ответ и прочитать заголовки ответов, используя ResponseInceptor или Custom CallBack. Но не знаю, как я могу это использовать.
здесь код,
// Define the interceptor, add authentication headers
Interceptor interceptor = new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request newRequest = chain.request().newBuilder().addHeader("Authorization", new ITAuthorizationUtil().getAuthorization(user.getMobile_no(), user.getPassword())).build();
return chain.proceed(newRequest);
}
};
// Add the interceptor to OkHttpClient
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseURL)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
ITAPIEndpointsInterface apiEndpointsInterface = retrofit.create(ITAPIEndpointsInterface.class);
///
Call<User> call = apiEndpointsInterface.userLogin(senderId, applicationId, registrationId);
//asynchronous call
call.enqueue(new Callback<User>() {
@Override
public void onResponse(Response<User> response) {
ApiResponse apiResponse = ITAPIStatusInfo.getApiErrorObject_Retrofit(response.headers());
onSuccess(response.body(),apiResponse);
}
@Override
public void onFailure(Throwable t) {
Log.d(">>> ",t.getMessage());
}
});