java - 在我的响应中获取 302 重定向的 HttpException

标签 java android rx-java retrofit2 okhttp

Api.initOAuthDiscoverConfig("url")
                .flatMap(new Function<String, ObservableSource<String>>() {
                    @Override
                    public ObservableSource<String> apply(String jsonString) throws Exception {

                        Log.i(TAG, " initOAuthDiscoverConfig " + jsonString);
                        JSONObject jsonObject = new JSONObject(jsonString);

                        String nonce = UUID.randomUUID().toString();
                        String state = nonce.split("-")[0];
                        return Api.initOAuthLogin(jsonObject.getString("authorization_endpoint") + "?" +
                                "scope=" +
                                "response_type=code&\n" +
                                "client_id=" +
                                "redirect_uri=" +
                                "state=" + getAlphaNumericString(12) + "&" +
                                "nonce=" + getAlphaNumericString(10) + "&" +
                                "prompt=login");
                    }
                }).flatMap(new Function<String, ObservableSource<String>>() {
            @Override
            public ObservableSource<String> apply(String authLoginString) throws Exception {
                Log.i(TAG, " initOAuthLogin " + authLoginString);
                RequestBody requestBody = RequestBody.create("loginForm=loginForm&" +
                        "javax.faces.ViewState=stateless&" +
                        "loginForm:username=" +
                        "loginForm:password=" +
                        "loginForm:loginButton=Sign In", MediaType.parse("Content-Type:application/x-www-form-urlencoded*"));
                return Api.OAuthLoginForm("url", requestBody);
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(new DisposableObserver<String>() {
                    @Override
                    public void onNext(String loginResponseString) {
                        Log.i(TAG, " OAuthLoginForm " + loginResponseString);
                        hideProgress();
                        Toast.makeText(this, "onNext called", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onError(Throwable e) {
                        hideProgress();
                        showAlertDialog(getString(R.string.something_went_wrong), false);
                        Toast.makeText(this, "onError called", Toast.LENGTH_SHORT).show();
                        HttpException error = (HttpException)e;
                        String errorBody = error.response().errorBody().toString();
                        Log.d(TAG, "onError: "+ errorBody);
                    }

                    @Override
                    public void onComplete() {

                    }
                });

它每次都会进入 onError,而不是 subscribeWith 中的 onNext。不知道哪里出了问题。感谢任何帮助。

根据我的理解,我认为 DisposableObserver 中存在一些问题。 (也许我错了)。

P.S:- 对 Rxjava 的经验不多

最佳答案

根据实现 onErrorResumeNext 函数的评论中的讨论,解决了这个问题。

关于java - 在我的响应中获取 302 重定向的 HttpException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58842158/

相关文章:

java - 无法将值从 Java 代码传递到 JSP

Java多态-如何判断是否调用父类(super class)方法和子类方法以及父类(super class)变量还是子类变量?

java - 我想在同一个键下添加值

java - ANDROID数据库找不到列_id,即使它是KEY_ID=_id

android - 设置相机拍摄图像的分辨率

python - RxPy - 为什么排放与合并运算符交错?

java - 发出 2 个可观察量,处理结果,然后发出另一个

java - 星级显示不正确

java - 如何保持多线程所需的公共(public)数据

javafx - 是否可以将马里奥示例从 Elm 转换为纯 JavaFX 或 JavaFX+RxJava,同时保留 Elm 的高级抽象?