我有一个Atlas应用程序,根据所使用的Atlas有一些特定的部分。我们基本上将其描述为:
一项地图活动以显示地点
一个地点详细信息活动以显示地点详细信息
我正在使用口味来构建与每个地图集相对应的应用程序。例如:
一餐厅风味
一处观光景点
每个地图集都从不同的服务器URL获取数据,尽管API相同,但是在处理位置详细信息时返回的JSON具有一些特定的部分:
餐馆具有JSON属性,例如open_time,food_type等,例如:{ "name": "", lat: "", lon: "", "opening_time": "", "food_type": "" }
观光景点具有JSON属性,例如access_type,海拔高度...{ "name": "", lat: "", lon: "", "access_type": "", "altitude": "" }
我正在使用Jackson进行JSON解析,并且达到了以下目的:
我完成了所有常见属性的解析,并将其显示在details活动中。
正确调用了各个服务器(在Gradle中将URL指定为BuildConfig常量)。
问题
我是刚建立新口味的人,我想知道哪种是处理特定口味代码的最佳方法(Jackson解析和详细视图)。我的意思是最干净的代码重复最少。
到目前为止,我做了什么:
对于视图,我觉得我可以简单地合并一个布局XML,每个变体都将覆盖它。这似乎可以解决问题。
对于Java代码,我还是很迷茫。也许像
class Place {
@JsonProperty("name")
String name;
@JsonUnwrapped
Details details;
}
但是,如何在不复制通用地方代码和解析注释的情况下获得特定于风味的Details实现?即:
餐厅风味使用
com.atlas.restaurant.Details
观光风味用途
com.atlas.sightseeing.Details
PS:我无法更改有关API和服务器代码的任何内容。
最佳答案
没有答案,所以这是我的做法:
1.在主源集中将com.example.model.Place
类创建为
class Place {
@JsonProperty("name")
String name;
@JsonUnwrapped
Details details;
}
2.为
com.example.model.Details
风味源集创建一个restaurant
类class Details {
@JsonProperty("opening_time")
String openingTime;
}
3.为
com.example.model.Details
风味源集创建一个sightseeing
类class Details {
@JsonProperty("access_type")
String accessType;
}
4.工作流程
打开“构建变体”面板,然后选择要处理的样式。然后,将选择适当的源集。完成某种口味后,您可以切换到另一种口味,如果缺少某个类,则会收到指示该类的警告和错误。