Android 响应为400错误时,改装2崩溃
我正在使用Rxjava和Rx2 应用程序收到400错误代码响应时发生崩溃 但我不知道在哪里处理错误 接口“IMyService” 改装,RxjavaAndroid 响应为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)
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
}
});