无法读取 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.
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.