Android - 构建特定于风味的代码和视图

时间:2014-07-23 08:01:19

标签: android jackson android-productflavors

我有一个地图集应用程序,根据使用的地图集有一些特定的部分。我们基本上将其描述为:

  • 一个展示地点的地图活动
  • 一个地方详细介绍活动以显示地点详情

我正在使用flavor来构建与每个地图集相对应的应用程序。例如:

  • 一家餐馆味道
  • 一个观光景点味道

每个地图集都从不同的服务器URL获取数据,虽然API是相同的,但在处理地点详细信息时,返回的JSON有一些特定的部分:

  • 餐馆有jSON属性,如opening_time,food_type,......例如:

    { "name": "", lat: "", lon: "", "opening_time": "", "food_type": "" }

  • 观光网站有JSON属性,如access_type,altitude,......例如:

    { "name": "", lat: "", lon: "", "access_type": "", "altitude": "" }

我正在使用Jackson进行JSON解析并达到以下目的:

  • 我完成了解析所有常见属性并在详细信息活动中显示它们。
  • 正确调用各个服务器(在Gradle中将URL指定为BuildConfig常量)。

问题

我很擅长构建口味,我想知道哪种是处理特定风味代码的最佳方法(Jackson解析和详细视图)。我的意思是最干净,尽可能少的代码重复。

到目前为止我做了什么:

对于视图,我觉得我可以简单地合并一个布局XML,它将覆盖每个变体。这似乎可以解决问题。

对于java代码,我仍然很丢失。也许像是

class Place {
  @JsonProperty("name")
  String name;

  @JsonUnwrapped
  Details details;
}

但是如何在没有复制常见的Place代码和解析注释的情况下获取特定于flavor的Details实现?即:

  • 餐厅风味使用com.atlas.restaurant.Details
  • 观光风味使用com.atlas.sightseeing.Details

PS:我无法改变API和服务器代码。

1 个答案:

答案 0 :(得分:1)

没有答案,所以我就是这样做的:

1。在主源集中创建com.example.model.Place

class Place {
  @JsonProperty("name")
  String name;

  @JsonUnwrapped
  Details details;
}

2。为com.example.model.Details flavor源集

创建restaurant
class Details {
      @JsonProperty("opening_time")
      String openingTime;
}

3。为com.example.model.Details flavor源集

创建sightseeing
class Details {
      @JsonProperty("access_type")
      String accessType;
}

4。工作流

打开“构建变体”面板,然后选择您正在处理的风格。然后将选择适当的源集。使用flavor时,您可以切换到另一个,如果缺少一个类,您将收到指示它的警告和错误。