gpt4 book ai didi

android - 如何在不传入 Retrofit 实例的情况下使用 Retrofit 的 GsonConverter

转载 作者:行者123 更新时间:2023-11-30 00:17:37 27 4
gpt4 key购买 nike

我目前正在开发 Retrofit2 客户端的错误处理部分(使用 Retrofit 的 Rx 实现)。

找了一段时间,没有找到简单的方法将Retrofit返回的ResponseBody反序列化到我报错的POJO中。

我很乐意使用 one of the json converters supported by Retrofit但是他们每个人都需要传入实际 Retrofit 类的实例,这在我的 onError() 回调中似乎不可用。

有没有办法从“onError()”回调中提供“改造”?或者更好的是,有没有办法在不提供反序列化的情况下进行反序列化?我不明白为什么需要这样做。

如果不是,是不是我的设计不好?

This post提供了一种摆脱它的方法,但它对我不起作用,我想它已经过时了。

This one使用 warkaround 来访问 retrofit instant,我不想要那样。

否则,其他帖子建议使用他们自己的解析器,我真的不需要那个。

api.login(email, password)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<LoginResponse>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
// Nothing to do
}

@Override
public void onNext(@NonNull LoginResponse loginResponse) {
// Normal use case with 2xx http status
}

@Override
public void onError(@NonNull Throwable e) {
// non-2xx http status handled here
// This is what I tried
if (e instanceof HttpException) {
HttpException exception = (HttpException) e;
Response response = exception.response();
Converter<ResponseBody, LoginError> converter = GsonConverterFactory.create()
.responseBodyConverter(LoginError.class, new Annotation[0], retrofit); //<--- How can I provide "retrofit" here ?
LoginError error = converter.convert(response.errorBody());
}
}

@Override
public void onComplete() {
// Nothing to do
}
});

最佳答案

我只需要使用 Gson.fromJson(),而不是 GsonConverter.responseBodyConverter()

我使用response.errorBody().toString() 获取要反序列化的 JSON 字符串。

return new Gson().fromJson(response.errorBody().string(), LoginError.class);

感谢 CommonsWare 指出这一点。

关于android - 如何在不传入 Retrofit 实例的情况下使用 Retrofit 的 GsonConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46954217/

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