You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:22:39