¿Cuál es la mejor manera de tratar con el objeto JSON?
Tengo una cadena grande que representa el feed de JSON. Mi aplicación descarga este feed desde el servicio web remoto.
Preguntas:
- Las pantallas de preferencias anidadas pierden el tema
- Android: ¿hay una manera de quitar una cadena de preferencias compartidas por su valor en lugar de su clave?
- ¿Cómo agregar la categoría en el encabezado de preferencia?
- ¿Cómo agregar dinámicamente preferencias en la pantalla de preferencias y enlazar sus valores?
- Preferencias de Android, cómo establecer la dependencia de las preferencias personalizadas
1) Una vez que descarga el feed de JSON, ¿dónde debo almacenarlo? Ahora mismo lo estoy almacenando en las Preferencias de la aplicación y funciona bien. Sólo estoy interesado si hay alguna razón para no hacerlo, o si hay opciones mejores / más rápidas, como almacenamiento interno o algo más?
2) Cuando estoy a punto de mostrar datos de este feed en mi actividad, hago algo como esto:
JSONObject jsonObj = new JSONObject(json_string); JSONArray jsonArr = jsonObj.getJSONArray("root"); for (int m = 0; m < jsonArr.length(); m++) { .... }
El problema es que la primera línea que analiza el feed de JSON es algo caro. En mi tamaño actual de alimentación (que podría crecer en el futuro) se tarda quizás medio segundo para completar, no mucho, pero sigue siendo un problema. Por ejemplo, hago clic en el botón para llamar a la actividad (para mostrar datos) y esta pausa de 1/2 segundo es notable y no es buena.
Para evitar esta pausa, probablemente debería analizar JSON inmediatamente después de descargar el feed. Entonces pregunta es, ¿dónde debo mantener analizados objeto JSON?
I) No puedo guardar el objeto JSON en las preferencias ya que sólo los datos primitivos pueden almacenarse allí.
Ii) ¿Debo hacer el análisis sintáctico cada vez que empiece mi aplicación, y hacer que mis objetos JSON analizados (tengo más de ellos) sean globales (a nivel de aplicación) para poder acceder a ellos desde todas mis actividades?
Iii) O, creo que mi tercera opción sería declarar JSON objests estático para que puedan ser de fácil acceso de otras actividades?
¿Cuál es la mejor manera de hacer esto?
GRACIAS.
- Preferencias anidadas en una lista dinámica de preferencias en Android
- Cargar diseño en onCreateView para las preferencias personalizadas
- Hacer que Preferencia parezca deshabilitada, pero sigue registrando clics
- La forma más segura de usar SharedPreferences
- Referencia a una cadena en un recurso de matriz de cadena con xml
- Cómo eliminar PreferenceCategory de forma programática?
- Android PreferenceScreen Barra de título quitar
- Preferencias sin métodos obsoletos
Si la velocidad es verdaderamente un problema, una forma fácil de acelerar significativamente el análisis sintáctico (así como de escribir) de los datos JSON sería usar a Jackson para analizar datos JSON. En comparación con la librería org.json (que incluye SDK de Android) es al menos 3 a 5 veces más rápida si sólo desea analizar los mapas o las listas (http://www.cowtowncoder.com/blog/archives/2009/02/ Entry_204.html). Pero si se puede vincular a los objetos Java es aún más rápido y utiliza menos memoria también.
Si desea guardar datos JSON, normalmente sólo se serializa como archivos, o como BLOB en bases de datos; Pero a menos que realmente tengas que hacerlo, es mejor simplemente aferrarse a los objetos Java creados a partir de datos JSON.
¿Necesita guardarlo? Si lo descarga una vez desde una página web y eso es todo lo que necesita, almacenarlo en las preferencias compartidas está bien. Si necesita obtenerlo mucho, ¿por qué incluso almacenarlo? También se puede almacenar en el directorio caché
Parece que debería usar la base de datos SQLite para almacenar los valores que extraiga del JSON. Esto debería ayudarle a empezar: http://developer.android.com/guide/topics/data/data-storage.html#db
Todas sus actividades dentro de su aplicación pueden consultar la base de datos para los datos. Si está utilizando un ListView para ver la información, podría utilizar un CursorAdapter para llenar fácilmente la lista.
Incluso puede crear un proveedor de contenido para compartir esta información con otras aplicaciones
- ¿Por qué falta la imagen del sistema Intel Atom x86 (API 15) en AVD Manager?
- Las API de google maps de Android obtienen la programación de direcciones