我需要构建位置列表(通过response
数组创建place
的实例,最后接收位置列表(在json中为place
)吗?
如何使用Gson和Retrofit以及自定义反序列化器来解析它?
我有以下结构:
{
"success": true,
"error": null,
"response": [
{
"loc": {
"lat": 51.50853,
"long": -0.12574
},
"place": {
"name": "London",
"state": "",
"stateFull": "",
"country": "GB",
"countryFull": "United Kingdom",
"region": "",
"regionFull": "",
"continent": "eu",
"continentFull": "Europe"
},
"profile": {
"elevM": 21,
"elevFT": 69,
"pop": 7556900,
"tz": "Europe/London",
"tzname": "BST",
"tzoffset": 3600,
"isDST": true,
"wxzone": null,
"firezone": null,
"fips": null,
"countyid": null
}
},
.............
.............
]
}
答案 0 :(得分:0)
您可以使用Android Studio插件RoboPOJOGenerator。从数据创建模型类非常容易。
This answer讲述了如何处理翻新中的列表响应。
更新
我认为让自定义解串器仅用于解析列表不是一个好主意。得到响应后可以过滤或映射列表的时间。最多需要3-4行代码。
如果您不想上很多课。那么您就可以安全地删除Profile.java
和Loc.java
了,Gson
将仅解析在pojo中声明的数据。
设置通用响应类
您可以使用Java Generics将单个类用于处理所有响应。参见示例。
public class ApiResponse<T> {
@SerializedName("error")
@Expose
private String error;
@SerializedName("success")
@Expose
private boolean success;
@SerializedName("response")
@Expose
private T response;
// make getter setters
}
现在,您可以在ApiService中定义response
类型。像这样
@GET("api/users/login")
Call<ApiResponse<ModelUser>> getUser();
@GET("api/users/login")
Call<ApiResponse<ModelCity>> getCity();
因此,您不必每次都创建3个类。该通用类将对所有响应起作用。