API-интерфейс
@FormUrlEncoded
@POST("register.php")
Observable<String> registerUser(@Field("email") String email, @Field("password") String password);
В моем ведущем MVP
onCreate{
Observable<String> registerUserObservable=
apiInterface.registerUser("[email protected]", "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., которую я не знаю, как ее решить. Это из-за того, что ответ сервера является строкой?
Заранее спасибо.
Если ваш сервер отправляет обычный строковый ответ, а не строку JSON, вам необходимо использовать другой конвертер, который считывает строку в String. К счастью, официально существует Преобразователь скаляров.
A Converter which supports converting strings and both primitives and their boxed types to text/plain bodies.
вероятно, что-то не так с форматом ответа. если
Use JsonReader.setLenient(true) to accept malformed JSON at line 2 column 1 path $вообще появляется - вы, вероятно, не получаете в ответ действительный JSON