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

如何使用Retrofit发送POST请求、异步处理并读取完整JSON响应?

解决Retrofit无法读取完整JSON响应的问题

1. 更新数据模型类PostModel

你的PostModel目前只包含请求字段,没有对应服务器返回的message、ID、NAME字段,需要补充这些字段及对应的getter方法(Retrofit解析响应依赖空构造方法,也要添加):

public class PostModel {
    // 请求时的原有字段
    private String tipo;
    private String dni;
    private String instrucciones;
    private String video;

    // 服务器返回的新增字段
    private String status;
    private String message;
    private String ID;
    private String NAME;

    // 请求用的构造方法
    public PostModel(String tipo, String dni, String instrucciones, String video) {
        this.tipo = tipo;
        this.dni = dni;
        this.instrucciones = instrucciones;
        this.video = video;
    }

    // Retrofit解析响应必须的空构造方法
    public PostModel() {}

    // 所有字段的getter方法
    public String getStatus() {
        return status;
    }

    public String getMessage() {
        return message;
    }

    public String getID() {
        return ID;
    }

    public String getNAME() {
        return NAME;
    }
}

2. 在回调中读取完整响应数据

现在可以通过response.body()直接获取所有返回字段的值:

@Override
public void onResponse(Call<PostModel> call, Response<PostModel> response) {
    progressDialog.dismiss();
    if (response.isSuccessful()) {
        PostModel responseData = response.body();
        if (responseData != null) {
            // 读取所有返回字段
            String status = responseData.getStatus();
            String message = responseData.getMessage();
            String id = responseData.getID();
            String name = responseData.getNAME();

            // 示例:用Toast展示完整响应内容
            String fullInfo = String.format("状态:%s\n消息:%s\nID:%s\n名称:%s",
                                           status, message, id, name);
            Toast.makeText(MainActivity3.this, fullInfo, Toast.LENGTH_LONG).show();
        }
    }
}

3. (可选)直接获取原始JSON字符串

如果需要查看服务器返回的原始JSON文本,可以读取响应的原始流:

@Override
public void onResponse(Call<PostModel> call, Response<PostModel> response) {
    progressDialog.dismiss();
    if (response.isSuccessful()) {
        // 读取原始JSON字符串
        try {
            String rawJson = response.raw().body().string();
            Log.d("完整响应JSON", rawJson);
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 同时仍可使用解析后的PostModel对象
        PostModel responseData = response.body();
        // ...
    }
}

注意:response.raw().body().string()只能调用一次,调用后流会关闭,若需同时解析对象和获取原始字符串,建议先读取字符串再用Gson手动解析。

内容的提问来源于stack exchange,提问作者EOC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 22:16:15