2012-09-06 14 views
5

Estoy escribiendo una aplicación para Android que es capaz de exportar el estado actual de un Activity o Fragment a un JSON-archivo, que tiene el siguiente formato común:Android/Java JSON común interfaz de importación

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

Esto significa que Activities/Fragments que tienen la capacidad de exportar llenan los contenidos marcados implementando una interfaz que llamé "Exportable" y la función de exportación global llama a los métodos definidos en la interfaz. Esta es una solución avanzada que funciona bastante bien.

Hasta ahora todo bien. Ahora quiero hacer la dirección inversa. Deseo cargar un archivo y llamar al correspondiente Activity/Fragment dependiendo del contenido del identificador.

Al leer el contenido de la "entrada" y el "resultado" debe hacerse un método del Activity/Fragment.

Desafortunadamente, esto no es obvio para mí la forma de resolver este problema de una manera elegante. ¿Cuál es la mejor manera de hacerlo? La solución debe ser lo más abstracta posible para que pueda extenderse fácilmente.

+0

¿De qué se sirve el uso de ['SharedPreferences'] (http://developer.android.com/guide/topics/data/data-storage.html#pref) para guardar y restaurar el estado de' Activity'? Esto también sobrevive a los reinicios de la aplicación/dispositivo. Si solo desea mantener un estado efímero (rotación del dispositivo, formación de fondo), puede usar el sistema integrado '' savedInstanceState' 'Bundle'] (http://developer.android.com/training/basics/activity- ciclo de vida/recreating.html). –

Respuesta

0

Podría haber tantas respuestas diferentes a esto. Google tiene una biblioteca llamada GSON, que puede leer y escribir automáticamente datos JSON desde y hacia las clases de Java. Si no desea usar una biblioteca, puede usar la reflexión de Java.

0

JSONObject js = new JSONObject ("datos");

JSONObject jSObject1 = js.getJSONObject ("resultado"); JSONObject jSObject2 = js.getJSONObject ("entrada"); y así sucesivamente espero que entiendo su problema

0

Un if-else sería la solución más simple, pero si no es lo suficientemente abstracto para usted, utilice el Abstract Factory pattern.

Crea una interfaz ExportableFactory que define un método para crear un Exportable, y las implementaciones de esta interfaz para Activity y Fragment. Luego cree un Map<String, ExportableFactory> que mapea los valores posibles de identifier en la fábrica correcta. A continuación, llame:

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

esta manera, si desea agregar una tercera aplicación de Exportable, que sólo tendrá que crear la aplicación correspondiente de ExportableFactory y añadirlo al mapa, sin modificar la función de llamada.

Cuestiones relacionadas