Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 响应为400错误时,改装2崩溃_Android_Retrofit2_Rx Java - Fatal编程技术网

Android 响应为400错误时,改装2崩溃

Android 响应为400错误时,改装2崩溃,android,retrofit2,rx-java,Android,Retrofit2,Rx Java,我正在使用Rxjava和Rx2 应用程序收到400错误代码响应时发生崩溃 但我不知道在哪里处理错误 接口“IMyService” 改装,Rxjava Retrofit retrofitClient = RetrofitClient.getInstance(this); iMyService = retrofitClient.create(IMyService.class); compositeDisposable.add(iMyService.login(email, password)

我正在使用Rxjava和Rx2

应用程序收到400错误代码响应时发生崩溃 但我不知道在哪里处理错误

接口“IMyService”

改装,Rxjava

Retrofit retrofitClient = RetrofitClient.getInstance(this);
iMyService = retrofitClient.create(IMyService.class);

compositeDisposable.add(iMyService.login(email, password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String response) throws Exception {
                         //....
           }));
对不起,我的英语水平很差

试试:

compositeDisposable.add(iMyService.login(email, password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                        new Consumer<String>() {
                            @Override
                            public void accept(String response) throws Exception {
                                //....
                            }
                        },
                        new Consumer<Throwable>() {
                            @Override
                            public void accept(Throwable throwable) throws Exception {
                                // handle the error here
                                Log.e("LOGIN_ERROR", "", throwable);
                                if ((throwable instanceof HttpException && ((HttpException) throwable).code() == 401)
                                || (throwable.getCause() instanceof HttpException && ((HttpException) throwable.getCause()).code() == 401)) {
                                    // handle 401 error specifically
                                }
                            }
                        });
compositeDisposable.add(iMyService.login)(电子邮件、密码)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(
新消费者(){
@凌驾
公共void接受(字符串响应)引发异常{
//....
}
},
新消费者(){
@凌驾
public void accept(Throwable Throwable)引发异常{
//在这里处理错误
Log.e(“登录错误”,“可丢弃”);
if((HttpException的可丢弃实例&((HttpException)可丢弃).code()==401)
||(throwable.getCause()实例HttpException&((HttpException)throwable.getCause()).code()==401)){
//具体处理401错误
}
}
});

您的API正在向您的可观察对象返回一个错误,并且您的代码snipppet没有实现Rx错误处理程序,因此导致崩溃。您可以将其更改为类似以下内容:

compositeDisposable.add(iMyService.login(email, password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Void>() {
                 @Override
                 public void onCompleted() {
                 // May be ignored
                 }

                 @Override
                 public void onError(Throwable error) {
                 // check error type and handle here
                 if (error instanceof HttpException) // handle all kinds of Http errors
                 }

                 @Override
                 public void onNext(String response) {
                 // consume results
                 }
             });
compositeDisposable.add(iMyService.login)(电子邮件、密码)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新观察员){
@凌驾
未完成的公共无效(){
//可以忽略
}
@凌驾
公共无效onError(可丢弃错误){
//在此处检查错误类型和句柄
if(error instanceof HttpException)//处理各种Http错误
}
@凌驾
public void onNext(字符串响应){
//消费结果
}
});
Caused by: retrofit2.adapter.rxjava2.HttpException: HTTP 401 Unauthorized
    at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:54)
    at retrofit2.adapter.rxjava2.BodyObservable$BodyObserver.onNext(BodyObservable.java:37)
    at retrofit2.adapter.rxjava2.CallExecuteObservable.subscribeActual(CallExecuteObservable.java:43)
    at io.reactivex.Observable.subscribe(Observable.java:10981)
    at retrofit2.adapter.rxjava2.BodyObservable.subscribeActual(BodyObservable.java:34)
    at io.reactivex.Observable.subscribe(Observable.java:10981)
compositeDisposable.add(iMyService.login(email, password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                        new Consumer<String>() {
                            @Override
                            public void accept(String response) throws Exception {
                                //....
                            }
                        },
                        new Consumer<Throwable>() {
                            @Override
                            public void accept(Throwable throwable) throws Exception {
                                // handle the error here
                                Log.e("LOGIN_ERROR", "", throwable);
                                if ((throwable instanceof HttpException && ((HttpException) throwable).code() == 401)
                                || (throwable.getCause() instanceof HttpException && ((HttpException) throwable.getCause()).code() == 401)) {
                                    // handle 401 error specifically
                                }
                            }
                        });
compositeDisposable.add(iMyService.login(email, password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Void>() {
                 @Override
                 public void onCompleted() {
                 // May be ignored
                 }

                 @Override
                 public void onError(Throwable error) {
                 // check error type and handle here
                 if (error instanceof HttpException) // handle all kinds of Http errors
                 }

                 @Override
                 public void onNext(String response) {
                 // consume results
                 }
             });