5

我正在编写一个 Android 应用程序,它能够将Activity或的当前状态导出Fragment到 JSON 文件,该文件具有以下通用格式:

{
  "data": {
    "result": {
      <content depends on specific class>
    },
    "input": {
      <content depends on specific class>
    }
  },
  "identifier": <identifier depends on specific class>,
  "version": 1
}

这意味着具有导出功能的Activities/Fragments填充了实现我称为“可导出”的接口的标记内容,并且整个导出功能调用了接口中定义的方法。这是一个直截了当的解决方案,效果很好。

到目前为止,一切都很好。现在我想做相反的方向。我想加载一个文件并根据标识符的内容调用对应的Activity/ 。Fragment

读取“输入”和“结果”的内容应通过Activity/Fragment本身的方法来完成。

不幸的是,这对我来说如何以优雅的方式解决这个问题并不明显。最好的方法是什么?解决方案应尽可能抽象,以便于扩展。

4

3 回答 3

0

这个问题可能有很多不同的答案。Google 有一个名为 GSON 的库,它可以自动在 Java 类中读取和写入 JSON 数据。如果不想使用库,可以使用 Java 反射。

于 2012-10-23T20:05:00.557 回答
0

if-else 将是最简单的解决方案,但如果它对您来说不够抽象,请使用抽象工厂模式

创建一个ExportableFactory接口,该接口定义一个方法来创建一个Exportable, 以及该接口的实现ActivityFragment。然后创建一个Map<String, ExportableFactory>将可能的值映射identifier到正确的工厂。然后调用:

Exportable exportable = factoryMap.get(identifier).createExportable(data);

这样,如果您想添加 的第三个实现Exportable,您只需创建相应的实现ExportableFactory并将其添加到地图中,而无需修改调用函数。

于 2012-11-29T12:30:54.457 回答
0

JSONObject js= 新 JSONObject("数据");

JSONObject jSObject1=js.getJSONObject("结果"); JSONObject jSObject2=js.getJSONObject("输入"); 等等,我希望我能理解你的问题

于 2012-10-24T00:11:34.077 回答