所有我会假设你现在有什么样的意见后:
{
"name": "",
"time": null,
"event_pic_url": null,
"description": "",
"event_type": null,
"invite_only": false,
"free": false,
"age_restriction": false,
"ticket_price": null,
"venue": {
"name": "",
"rating": null,
"longitude": null,
"latitude": null
}
}
由于您使用Gson
,你会希望有以下型号
public class Venue {
@SerializedName("name")
@Expose
private String name;
@SerializedName("rating")
@Expose
private Integer rating;
@SerializedName("longitude")
@Expose
private Double longitude;
@SerializedName("latitude")
@Expose
private Double latitude;
// ...
}
public class Event {
@SerializedName("name")
@Expose
private String name;
@SerializedName("time")
@Expose
private String time;
@SerializedName("event_pic_url")
@Expose
private String eventPicUrl;
@SerializedName("description")
@Expose
private String description;
@SerializedName("event_type")
@Expose
private String eventType;
@SerializedName("invite_only")
@Expose
private Boolean inviteOnly;
@SerializedName("free")
@Expose
private Boolean free;
@SerializedName("age_restriction")
@Expose
private Boolean ageRestriction;
@SerializedName("ticket_price")
@Expose
private Double ticketPrice;
@SerializedName("venue")
@Expose
private Venue venue;
// ...
}
请注意我在这里假设了一些数据类型,即latitude
和longitude
以及event_type
。由于在json中他们是null
我无法确定,但我想你可以从这个例子中理解。也请添加适当的获取者和设置者。
我希望您专注于venue
部分。正如你看到的,我基本上是在Java对象中重新创建“嵌套”的json部分。这就是它,Gson
和retrofit
将为你做其余的。就是这样。一个谨慎的词 - 这可能会有很大的不同,这取决于你如何做事。我更喜欢rxjava
,但我会在这里使用回调方法,因为它更容易解释。
改造1.9你可以这样做:
public interface EventService {
@GET("/url/to/events/endpoint/")
public void get(Callback<Event> callback);
}
提供一切顺利的话,在你的回调success
方法,你会得到的Event
这样的情况:你可以访问Venue
对象提供返回的JSON实际上是上面的那个。
改造界面改变了一点,但它本质上是相同的思路前:
public interface EventService {
@GET("/url/to/events/endpoint/")
public Call<Event> get();
}
一旦你enqueue
的要求和定义Callback
对象,你会在你成功得到Event
对象方法可以参考一个场地。下面是这些回调可能与改造实现(可能会略有改进版本之间的变化我不完全记):
eventService.get().enqueue(new Callback<Event>() {
@Override public void onResponse(Call<Event> call, Response<Event> response) {
if (!response.isSuccessful()) {
// Handle http error
return;
}
Event event = response.body();
Venue venue = event.getVenue();
// do something with it
}
@Override public void onFailure(Call<Event> call, Throwable t) {
// Handle error
}
});
}
这里eventService
是Retrofit.create(EventService.class)
创建的对象。
再次改装位可能会改变,具体取决于您要使用的方法。重要的是要了解如何从json响应映射到java对象,基本上你只需要复制相同的json结构,但在java对象中。希望能帮助到你。
取决于...我有几个问题,那么我可能会提供帮助。你是否在使用Gson的Retrofit?你的休息api实际上是返回上面的jsons,还是序列化的结果?我的意思是,服务器是否可能不会向您发送嵌套的json?你已经有一些模型? – Fred
是的,我正在使用Gson改造。其他api返回json,如上所示。它不会发送嵌套的json。 – zacmwa
好的,改造不会为你开箱即用。你有2个选项,看看第一个调用是否支持一些参数,或者是头部会告诉服务器他应该在响应中包含''venue'' json。如果是这样,那么帮助会更容易。如果没有,那么你必须找出你如何获得该场所的ID,因为很可能你必须再打一次休息电话。我会采用第一种方法,试着弄清楚在第一个电话的回复中是否可以包含场地的身体。让我知道,我会进一步帮助你。 – Fred