Json阵列和改造

时间:2015-08-23 12:40:25

标签: java android json rest retrofit

我有这种json的回应:

 {
  error: false
  stats: {
          punti: 150
          punti2: 200
         }-
 }

我创建了一个 StatsReceiver 类:

public class StatsReceiver {
 Boolean error;
 Stats stat;

 public Boolean isError() {
     if (error == null)
         return true;
     else
         return error;
 }

 public int getPunti() {
     if (stat == null)
         return -1;
     else
         return stat.getPunti();
 }

 private class Stats {
     private int punti = 0;

     public int getPunti() {
         return punti;
     }

    public void setPunti(int punti) {
         this.punti = punti;
     }

     public int getPunti2() {
         return punti2;
     }

     public void setPunti2(int punti2) {
         this.punti2 = punti2;
     }

     private int punti2 = 0;

     public Stats(int punti, int punti2) {
         this.punti = punti;
         this.punti2 = punti2;
     }
 }
}

下一步:

 @GET("/v1/stats")
 void stats(@Header("Auth") String code,
              Callback<StatsReceiver> object);

现在我做的时候:

 apiServiceUsers.stats(apiKey, new Callback<StatsReceiver>() {
        @Override
        public void success(StatsReceiver statsReceiver, Response response) {
            if (statsReceiver.isError()) {
                Toast.makeText(this, "Error", Toast.LENGTH_LONG).show();
            } else {
                Toast.makeText(this, statsReceiver.getPunti(), Toast.LENGTH_LONG).show();
            }
        }

错误 false 符合预期,但 getPunti()始终返回-1,因此stat对象始终为 null

怎么了?

在日志控制台中的P.S,有:

 {"error":false,"stats":{"punti":150,"punti2":200}}

1 个答案:

答案 0 :(得分:1)

在您的JSON示例中,密钥为stats;但在您的Java类中,成员变量名为stat。要使Gson工作,这些必须完全相同,或者必须使用@SerializedName告诉Gson哪个JSON键对应哪个变量:

@SerializedName("stats")
Stats statOrSomethingElseEntirely;