我有这种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}}
答案 0 :(得分:1)
在您的JSON示例中,密钥为stats
;但在您的Java类中,成员变量名为stat
。要使Gson工作,这些必须完全相同,或者必须使用@SerializedName
告诉Gson哪个JSON键对应哪个变量:
@SerializedName("stats")
Stats statOrSomethingElseEntirely;