如何使用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
相关产品推荐
相关产品推荐

