无法读取 Retrofit 和 RxJava POST 请求的字符串响应

Cannot read String response of Retrofit and RxJava POST request

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 代码,我想 post 一个电子邮件和密码来注册用户。服务器应该 return 一个成功的字符串和一个失败的字符串。

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. 错误,我不知道如何解决。这是因为服务器的return响应是一个字符串吗?

提前致谢。

如果您的服务器发送正常的字符串响应而不是 JSON 字符串,您需要使用另一个转换器将字符串读入 String。很高兴官方有Scalars converter

A Converter which supports converting strings and both primitives and their boxed types to text/plain bodies.