Retrofit2中如何在onResponse中展示错误响应的提示信息?
解决Retrofit2错误响应解析问题
这是个非常常见的Retrofit错误处理场景,我来给你一步步搞定:
第一步:创建错误响应对应的Model类
因为接口返回的错误JSON结构和你正常的ModelSendCode完全不同,所以需要单独定义一个Model来匹配错误体的字段:
public class ModelErrorResponse { @Expose @SerializedName("name") private String name; @Expose @SerializedName("message") private String message; @Expose @SerializedName("code") private int code; @Expose @SerializedName("status") private int status; @Expose @SerializedName("type") private String type; // Getter和Setter方法 public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } // 其他字段的Getter/Setter可以按需添加 }
第二步:在onResponse中处理错误响应
Retrofit的response.isSuccessful()会判断状态码是否在200-299区间,非成功响应就需要解析错误体。在你的onResponse方法里加入以下逻辑:
@Override public void onResponse(Call<ModelSendCode> call, Response<ModelSendCode> response) { if (response.isSuccessful()) { // 正常成功响应,处理你的业务逻辑 ModelSendCode result = response.body(); // ... 这里写正常流程代码 } else { // 处理错误响应 if (response.errorBody() != null) { try { // 用Gson解析错误体(假设你已经在Retrofit中配置了Gson转换器) Gson gson = new Gson(); ModelErrorResponse errorModel = gson.fromJson( response.errorBody().string(), ModelErrorResponse.class ); // 弹出Toast展示错误message Toast.makeText( getApplicationContext(), errorModel.getMessage(), Toast.LENGTH_SHORT ).show(); } catch (IOException e) { e.printStackTrace(); // 解析失败时显示兜底提示 Toast.makeText( getApplicationContext(), "请求出错,请稍后重试", Toast.LENGTH_SHORT ).show(); } } else { Toast.makeText( getApplicationContext(), "未知错误", Toast.LENGTH_SHORT ).show(); } } }
额外提示:别忘了处理onFailure
网络超时、无网络这类情况会走到onFailure方法,也可以在这里给用户提示:
@Override public void onFailure(Call<ModelSendCode> call, Throwable t) { Toast.makeText( getApplicationContext(), "网络连接失败:" + t.getMessage(), Toast.LENGTH_SHORT ).show(); }
内容的提问来源于stack exchange,提问作者Alimov Shohrukh
相关产品推荐
相关产品推荐

