Я хочу отправить запрос POST с помощью Retrofit + RxJava, но он не работает, и я не знаю причину. В одном упражнении это работает, в другом - не хочу работать:
private void sendMerchantInfo() {
try {
String advertiserOriginalDeepLink = "https://mywebsite.com/main-1?param1=value1¶m2=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
. Пожалуйста, помогите.