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?

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(); 
  • Tipos de datos utilizados en SQLite
  • Error al insertar android.database.sqlite.sqliteconstraintexception error código 19 restricción fallida
  • SQLite - No se pudo abrir el archivo de base de datos
  • UnsatisfiedLinkError en el método nativo
  • Búsqueda acentuada en sqlite (android)
  • Cómo almacenar datetime en SQLite
  • Acceso a una base de datos .sqlite descargada determinada en el almacenamiento externo desde una aplicación de Android
  • Android: Bulk Insert, cuando InsertHelper está obsoleto
  • Cómo comprobar la base de datos en el dispositivo Android no enraizada
  • Uso adecuado de yieldIfContendedSafely () en una aplicación multithreaded de Android
  • Guardar datos en el método onDestroy de la actividad
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.