1

我有一个地图集应用程序,它有一些特定的部分,具体取决于使用的地图集。让我们基本上将其描述为:

  • 一项显示地点的地图活动
  • 一个地点详细信息活动以显示地点详细信息

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

  • 一餐厅风味
  • 一处观光地风味

每个图集都从不同的服务器 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 解析并达到以下目的:

  • 我完成了所有常见属性的解析,并将它们显示在 details 活动中。
  • 相应的服务器被正确调用(在 Gradle 中将 URL 指定为 BuildConfig 常量)。

问题

我对构建风味非常陌生,我想知道哪种是处理风味特定代码(杰克逊解析和详细视图)的最佳方法。我的意思是最干净的代码重复尽可能少。

到目前为止我做了什么:

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

对于java代码,我还是很迷茫。也许像

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

  @JsonUnwrapped
  Details details;
}

但是如何在不复制公共位置代码和解析注释的情况下获得特定于风味的详细信息实现呢?即:

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

PS:我无法更改有关 API 和服务器代码的任何内容。

4

1 回答 1

1

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

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

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

  @JsonUnwrapped
  Details details;
}

2.为风味源集创建一个com.example.model.Detailsrestaurant

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

3. 为风味源集创建一个com.example.model.Detailssightseeing

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

4. 工作流程

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

于 2014-07-26T16:16:38.450 回答