Json 数组和改造

Json array and retrofit

我有这样的 json 回复:

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

我创建了一个 StatsReceiver class:

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() return 总是 -1,所以 stat 对象总是 .

怎么了?

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

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

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

@SerializedName("stats")
Stats statOrSomethingElseEntirely;