Не удалось прочитать строковый ответ Retrofit и RxJava POST-запрос - PullRequest
0 голосов
/ 19 мая 2019

Интерфейс API

@FormUrlEncoded
@POST("register.php")
Observable<String> registerUser(@Field("email") String email, @Field("password") String password);

В моем MVP предъявитель

onCreate{
  Observable<String> registerUserObservable= 
  apiInterface.registerUser("test@gmail.com", "1234");
  registerUserObservable.subscribeOn("schedulers.io())
         .observeOn(AndroidSchedulers.mainThread())
         .subscribe(this::handleResult, this::handleError);
}

//methods
private void handleResult(String response){
  Log.d(TAG, response);
}

private void handleError(Throwable throwable){
  Log.d(TAG, throwable.getMessage());
}

Это мой код для модификации и rxjava, и я предполагаю опубликовать письмо и пароль для регистрации пользователя. Сервер должен вернуть строку в случае успеха и строку в случае ошибки.

Gson gson = new GsonBuilder()
           .setLenient()
           .create();

retrofit = new retrofit2.Retrofit.Builder()
           .baseUrl(BASE_URL)
           .addConverterFactory(GsonConverterFactory.create(gson))
           .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
           .build();

Я добавил часть кода gson setLenient, потому что она дает мне Use JsonReader.setLenient(true) to accept malformed JSON at line 2 column 1 path $ ошибка, если у меня ее нет. После добавления этого я получаю JSON document was not fully consumed. ошибку, которую я не знаю, как ее решить. Это из-за ответного ответа от сервера это строка?

Заранее спасибо.

1 Ответ

1 голос
/ 23 мая 2019

Если ваш сервер отправляет обычный строковый ответ, а не строку JSON, вам нужно использовать другой конвертер, который считывает строку в String.К счастью, есть Scalars converter официально.

Конвертер, который поддерживает преобразование строк и обоих примитивов и их штучных типов в текстовые / простые тела.

...