Retrotif2 + RxJava 发送 POST 请求失败



我想用Retrofit + RxJava发送POST请求,但它失败了,我不知道原因。在一个活动中它正在工作,在另一个活动中 - 不想工作:

private void sendMerchantInfo() {
try {
String advertiserOriginalDeepLink = "https://mywebsite.com/main-1?param1=value1&param2=value2";
String urlGetParams = LinkParser.getUrlGETParams(advertiserOriginalDeepLink);
Map<Object, Object> merchantInfo = LinkParser.parseUrlGetParams(urlGetParams);
String merchantInfoJson = new Gson().toJson(merchantInfo); //{"param1":"value1","param2":"value2"}
String url = "https://api.endpoint.com/v1/system/merchant/process";
userService = this.serviceGenerator.createService(UserService.class, true);
final Observable observable = userService.sendUserInfo(
url, new RetrofitMapBody(merchantInfo))
.doOnNext(new Consumer<ResponseBody>() {
@Override
public void accept(ResponseBody responseBody) throws Exception {
//handle 200 OK.
}
})
.onErrorResumeNext((ObservableSource<? extends ResponseBody>) v ->
Crashlytics.log("Send user info attempt failed."))
.subscribeOn(Schedulers.from(threadExecutor))
.observeOn(postExecutionThread.getScheduler());
addDisposable(observable.subscribe());
}
} catch (Exception exception) {
Crashlytics.log("Send user info attempt failed. " + exception.getMessage());
}
}

我怀疑这部分有问题,我正在尝试以OnCreate()方法发送请求:

.subscribeOn(Schedulers.from(threadExecutor))
.observeOn(postExecutionThread.getScheduler());

尝试使用它,但没有效果:

.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());

我做错了什么?它总是调用onErrorResumeNext()这可能是线程的东西,因为有一次我得到了例外:networkonmainthreadexception.请帮忙。

尝试使用 RxJava2 适配器,它会为您节省很多!

步骤 1:改造客户端设置

private Retrofit getRetrofitClient() {
return new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create()) //option 1
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.newThread())) //option 2
.build();
}

第 2 步:API 服务接口(示例(

@GET("endpoint")
Single<ResponseModel> fetch();

第 3 步:用法

Single<ResponseModel> fetch() {
return getRetrofitClient()
.create(APIService.class)
.fetch();
}
  • 任何非 2xx HTTP 响应都将包装在HttpException中,您可以从中提取状态代码、状态消息和完整的 HTTP 响应。

  • 任何连接错误都将包含在IOException

这就是将网络调用包装在任何 RxJava 流中所需做的一切。

相关内容

  • 没有找到相关文章

最新更新