我正在编写一个能够将Activity
或Fragment
的当前状态导出到JSON文件的Android应用程序,该文件具有以下通用格式:
{
"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
本身的方法完成。
不幸的是,对于我来说,如何以优雅的方式解决这个问题并不明显。 最好的方法是什么?解决方案应尽可能抽象,以便可以轻松扩展。
答案 0 :(得分:0)
这可能有很多不同的答案。 Google有一个名为GSON的库,它可以自动从Java类读取和写入JSON数据。如果您不想使用库,则可以使用Java反射。
答案 1 :(得分:0)
JSONObject js = new JSONObject(“data”);
JSONObject jSObject1 = js.getJSONObject(“result”); JSONObject jSObject2 = js.getJSONObject(“input”); 等等 我希望我理解你的问题
答案 2 :(得分:0)
if-else将是最简单的解决方案,但如果它不够抽象,请使用Abstract Factory pattern。
创建ExportableFactory
界面,定义创建Exportable
的方法,以及Activity
和Fragment
此界面的实现。然后创建一个Map<String, ExportableFactory>
,将identifier
的可能值映射到正确的工厂。然后致电:
Exportable exportable = factoryMap.get(identifier).createExportable(data);
这样,如果你想添加Exportable
的第三个实现,你只需创建ExportableFactory
的相应实现并将其添加到地图中,而无需修改调用函数。 / p>