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

时间:2019-05-19 08:28:55

标签: android post rx-java retrofit2 rx-java2

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 个答案:

答案 0 :(得分:0)

如果服务器发送的是普通字符串响应而不是JSON字符串,则需要使用另一个将字符串读入String的转换器。幸运的是,正式有Scalars converter

  

一个Converter,它支持将字符串和基元及其装箱的类型都转换为文本/纯文本主体。