gpt4 book ai didi

android - Retrofit 2 + Rxjava处理错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:09 24 4
gpt4 key购买 nike

所以当登录没有问题时,我已经从 Json 收到了一个 token ,并收到了哈希值

但是当来自服务器的响应是一个错误时,我无法获得 Json 消息 ({message:"Error : wrong email} "因为在 onError 中我们只获得一个 Throwable 作为参数,而不是像 on 中的模型类

如何从服务器的 onError 获取 json 消息??

final Observable<TokenResponse> observable = Service.login(userCredentials);
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<TokenResponse>() {
String error="";

@Override
public void onCompleted() {
mLoginView.whenLoginSucess();
}

@Override
public void onError(Throwable e) {

if (e instanceof HttpException) {
HttpException exception = (HttpException) e;
Response response = exception.response();
Converter<ResponseBody, ErrorFromServer> converter = new GsonConverterFactory()
.responseBodyConverter(ErrorFromServer.class, Annotation[0]);
ErrorFromServer error = converter.convert(response.errorBody());
}

mLoginView.errorText(error);

e.printStackTrace();

}

@Override
public void onNext(TokenResponse tokenResponse) {


SharedPreferences.Editor editor = sharedP.edit();
editor.putString("hash", tokenResponse.getToken());
editor.commit();

//getString return key value "hash" if there is no value, returns null
hash = sharedP.getString("hash",null);




}
});

token 响应码

public class TokenResponse {
@SerializedName("hash")
@Expose
private String token;

@SerializedName("message")
@Expose
private String message;


public String getMessage() {return message;}


public String getToken() {
return token;
}

最佳答案

我找到了一个解决方案,我有一个创建 Retrofit 的应用程序类,然后我刚刚创建了一个 ResponseBody 并使用 responseBodyConverter(,) 进行了转换

                @Override
public void onError(Throwable e) {
if (e instanceof HttpException) {
ResponseBody body = ((HttpException) e).response().errorBody();

Converter<ResponseBody, Error> errorConverter =
application.getRetrofit().responseBodyConverter(Error.class, new Annotation[0]);
// Convert the error body into our Error type.
try {
Error error = errorConverter.convert(body);
Log.i("","ERROR: " + error.message);
mLoginView.errorText(error.message);
} catch (IOException e1) {
e1.printStackTrace();
}
}



static class Error{
String message;
}

收到的 JSon 是 {"error":4041,"message":"Email not found"} 这就是类错误的原因,我只是创建了一个变量消息,因为我只想向用户显示消息

关于android - Retrofit 2 + Rxjava处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39144954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com