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?
- Abra / cierre correctamente una base de datos con el patrón de diseño Singleton
- Manera de actualizar la interfaz de usuario después de que se ha producido un cambio en la base de datos
- Uso de DAO verde con el proveedor de contenido
- Utilizar DB de Firebase con DB local
- En Android SQLite, trabajar directamente con Cursor es más eficiente en la memoria que crear objetos de modelo?
- La base de datos SQLite proporciona un índice automático de advertencia en <table_name> (column) Después de actualizar Android L
- Cómo especificar el orden de clasificación de la consulta a un proveedor de contenido
- Error: intentar repetir la consulta de un cursor ya cerrado
- Android adb, recuperar base de datos utilizando run-as
- Android SQLite: intenta volver a abrir un objeto ya cerrado
- Cómo obtener el ID de botón de radio comprobado creado dinámicamente en android
- Cómo asegurarse de que los datos se guardarán antes de que android mata un proceso
- Manejo de tablas y cursores SQLite en Android
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?