La mejor manera de almacenar en caché json
Mi aplicación debe funcionar no sólo en línea, sino también en modo fuera de línea. Por esa razón estoy considerando encontrar la mejor manera de cobrar datos. Me gusta usar SharedPreference para los datos de la tienda, pero en la documentación android El tamaño máximo de los caracteres permitidos para un valor de preferencias es 8192. ¿No sé si esto está bien o no? Intenté pasar fuera de esta idea que intenta utilizar FileCashing o el encajonamiento de sqLite.
Entonces, ¿qué crees que los chicos es lo mejor SharedPreference vs FileCashing o vs SqLiteCaching?
- Android: contacto de búsqueda basado en número de teléfono
- Programa de Android para convertir la base de datos SQLite a Excel
- Problemas en la creación de varias tablas en sqlite
- Android: ¿Cómo acceder a los resultados de Cursor cuando INNER JOIN se realiza?
- Sqlite Cursor Asignación de ventana 2048 kb no
- SQLiteException cerca de "<" mientras se borra la consulta
- Insertar en varias tablas con ContentProvider
- WinDeath en notifyDataSetChanged ()
- ¿Puedo almacenar de forma segura una cadena totalmente aleatoria (cualquier valor de 16 bits) en un SQLiteDB?
- Un comportamiento extraño para reguelr sqlite operación en android
- Android cursorwindow error de memoria en un fragmento específico
- Android SQLite COMO comodín de escape
- Sqlite android extraer contactos con número de teléfono
Personalmente, me gusta hacer esto de la siguiente manera. Cree una base de datos SQLite que pueda contener su contenido. A continuación, vincule la interfaz de usuario directamente a la base de datos mediante adaptadores y proveedores de contenido que envían una notificación cada vez que se cambian los datos para que la interfaz de usuario pueda actualizarse. La última pieza de la ecuación es alguna forma de servicio de sincronización que descarga contenido y lo guarda en la base de datos de forma asíncrona. De esta manera, puede administrar sus datos muy fácilmente porque está todo en el mismo lugar. La única parte que tendrá que averiguar para su aplicación es cómo decide cuándo actualizar o quitar los datos de la base de datos.
Adaptadores
Proveedor de contenido
Sincronización
Guardar el json en el directorio de la caché como archivo ….
Salvar:
// Instantiate a JSON object from the request response JSONObject jsonObject = new JSONObject(json); // Save the JSONOvject ObjectOutput out = new ObjectOutputStream(new FileOutputStream(new File(getCacheDir(),"")+"cacheFile.srl")); out.writeObject( jsonObject ); out.close();
Recuperar:
// Load in an object ObjectInputStream in = new ObjectInputStream(new FileInputStream(new File(new File(getCacheDir(),"")+"cacheFile.srl"))); JSONObject jsonObject = (JSONObject) in.readObject(); in.close();
Basado en su requisito recomendaría la base de datos de SQLite.
Dado que la preferencia compartida es adecuada para el almacenamiento de configuración – a menudo pequeños datos / cadenas.
Caché de archivos es difícil de gestionar, por lo que recomiendo SQLite – fácil de administrar y la capacidad de almacenar datos de masa.
Teniendo en cuenta el rendimiento, si el número de índice no es tan grande, la base de datos SQLite debe tener el rendimiento aceptable. Por ejemplo, sólo varios ms más lento que un caché de archivos.
Podría ser capaz de combinar estos dos enfoques juntos. Utilice el archivo de acceso aleatorio con el índice de desplazamiento almacenado en SQLite.
He utilizado el almacenaje interno que almacena el archivo en directorio del paquete de la aplicación que no puede ser accesible por el dispositivo no arraigado.
Aquí la clase que puede crear, leer y borrar el archivo
public class ReadWriteJsonFileUtils { Activity activity; Context context; public ReadWriteJsonFileUtils(Context context) { this.context = context; } public void createJsonFileData(String filename, String mJsonResponse) { try { File checkFile = new File(context.getApplicationInfo().dataDir + "/new_directory_name/"); if (!checkFile.exists()) { checkFile.mkdir(); } FileWriter file = new FileWriter(checkFile.getAbsolutePath() + "/" + filename); file.write(mJsonResponse); file.flush(); file.close(); } catch (IOException e) { e.printStackTrace(); } } public String readJsonFileData(String filename) { try { File f = new File(context.getApplicationInfo().dataDir + "/new_directory_name/" + filename); if (!f.exists()) { onNoResult(); return null; } FileInputStream is = new FileInputStream(f); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); return new String(buffer); } catch (IOException e) { e.printStackTrace(); } onNoResult(); return null; } public void deleteFile() { File f = new File(context.getApplicationInfo().dataDir + "/new_directory_name/"); File[] files = f.listFiles(); for (File fInDir : files) { fInDir.delete(); } } public void deleteFile(String fileName) { File f = new File(context.getApplicationInfo().dataDir + "/new_directory_name/" + fileName); if (f.exists()) { f.delete(); } } }
Puede crear, leer y eliminar el archivo llamando a los métodos de clase ReadWriteJsonFileUtils de la siguiente manera:
Para crear el archivo:
try { new ReadWriteJsonFileUtils(context).createJsonFileData(file_name, data); } catch (Exception e) { e.printStackTrace(); }
Para leer el archivo:
String jsonString = new ReadWriteJsonFileUtils(context).readJsonFileData(file_name);
Para eliminar archivos individuales
new ReadWriteJsonFileUtils(context).deleteFile(file_name);
Para eliminar todos los archivos
new ReadWriteJsonFileUtils(context).deleteFile();
- ¿Cómo ejecutar el archivo dex en android con el comando?
- ¿Diferencia entre START_STICKY y START_REDELIVER_INTENT?