【问题标题】:How to parse response of Retrofit with two Json object?如何用两个 Json 对象解析 Retrofit 的响应?
【发布时间】:2018-04-03 15:01:47
【问题描述】:

我找不到问题的解决方案。当我将数据发送到服务器时,它可以正常工作,但我无法通过相同的方法获得结果。

这是我的 JSON 响应:

{"ok":"true","msg":"active","data":{"_id":"1","name":"aaa","code":1111,"status" :1,"updated_at":"2018-04-03 07:26:56","created_at":"2018-04-03 07:17:05","key":"mmnnjmn34564lt"}}

我可以得到诸如“ok”和“msg”之类的结果,但我无法得到“data”字段。我该如何解决?

界面:

public interface ApiInterfaceService {

@POST("active")
Call<Data> createConfirmCode(@Body Data data);

OkHttpClient okHttpClient=new OkHttpClient();
    Retrofit retrofit=new Retrofit.Builder()
            .baseUrl(ApiClientConfig.BASE_URL)
            .client(okHttpClient)
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    apiInterfaceService =retrofit.create(ApiInterfaceService.class);
 }

数据.java

public class Data {

@SerializedName("ok")
public String ok;

@SerializedName("msg")
private String msg;

@SerializedName("data")
private List<dataResponse> data;
}

dataResponse.java

public class dataResponse{

@SerializedName("_id")
public Integer _id;

@SerializedName("name")
public String name;


@SerializedName("code")
public Integer code;

@SerializedName("status")
public Integer status;
}

我的代码:

    Data datamodel=new Data();
    Call<Data> call = apiInterfaceService.createConfirmCode(datamodel);
    call.enqueue(new Callback<Data>() {
        @Override
        public void onResponse(Call<Data> call, Response<Data> response) {
            if (response.isSuccessful()) {

     Log.i(InitialClass.TAG,String.valueOf(response.body().getMsg()+" "+response.body().getData());
            }
        }
        @Override
        public void onFailure(Call<Data> call, Throwable t) {
            Log.i(InitialClass.TAG,t.getMessage()+" "+ t.getCause());
        }
    });

【问题讨论】:

    标签: android model retrofit


    【解决方案1】:

    你的 json 看起来格式不正确,复制粘贴到 http://jsonviewer.stack.hu/ 并格式化它以查看你提供给我们的字符串中的 json 格式,如果这真的是你收到的 json,问题不在 android 端而是在服务器端.

    使用新的 json 进行编辑,您似乎正在请求一个数组

    @SerializedName("data")
    private List<dataResponse> data;
    

    但是你的 json 返回一个对象

    "data": {
        "_id": "1",
        "name": "aaa",
        "code": 1111,
        "status": 1,
        "updated_at": "2018-04-03 07:26:56",
        "created_at": "2018-04-03 07:17:05",
        "key": "mmnnjmn34564lt"
      }
    

    【讨论】:

    • @StefanCrain 不,这是真的当我写这个问题时,我有拼写错误,现在我改正了。
    • 如果你想要一个对象从 android 代码中删除 List,如果你想要一个数组修复你的 json 服务器端,所以它返回一个数组而不是一个对象
    • @SamuelEminet 我删除 List 并为数据变量设置 JSONObject 类型。但它不起作用。我想从那个 Json 中获取键值
    • 你的 dataResponse 类 POJO 怎么样? (应该以大写开头)
    猜你喜欢
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    相关资源
    最近更新 更多