Tengo un ArrayList
con objetos personalizados. Cada objeto personalizado contiene una variedad de cadenas y números. Necesito que la matriz permanezca, incluso si el usuario deja la actividad y luego quiere volver más tarde, sin embargo, no necesito la matriz disponible después de que la aplicación se haya cerrado por completo. Guardo muchos otros objetos de esta manera usando el SharedPreferences
pero no puedo entender cómo guardar mi matriz completa de esta manera. es posible? Tal vez SharedPreferences
no es la forma de hacerlo. ¿Hay un método más simple?
android
arraylist
sharedpreferences
ryandlf
fuente
fuente
Respuestas:
Después de API 11 la
SharedPreferences Editor
aceptaSets
. Puede convertir su Lista enHashSet
algo similar y almacenarla así. Cuando lo leas de nuevo, conviértelo en unArrayList
, clasifícalo si es necesario y listo.También puede serializar su
ArrayList
y luego guardarlo / leerlo en / desdeSharedPreferences
. A continuación se muestra la solución:EDITAR:
Ok, a continuación se muestra la solución para guardar
ArrayList
como objeto serializado enSharedPreferences
y luego leerlo desde SharedPreferences.Debido a que API solo admite el almacenamiento y la recuperación de cadenas hacia / desde SharedPreferences (después de API 11, es más simple), tenemos que serializar y deserializar el objeto ArrayList que tiene la lista de tareas en cadena.
En el
addTask()
método de la clase TaskManagerApplication, tenemos que obtener la instancia de la preferencia compartida y luego almacenar la ArrayList serializada usando elputString()
método:Del mismo modo, tenemos que recuperar la lista de tareas de la preferencia en el
onCreate()
método:Puede obtener
ObjectSerializer
clase del proyecto ObjectSerializer.java de Apache Pig .fuente
putStringSet
se agregó en la API 11. La mayoría de los programadores actuales apuntan al arrendamiento API 8 (Froyo).scoreEditor
?Usar este objeto -> TinyDB - Android-Shared-Preferences-Turbo es muy simple.
poner
Llegar
ACTUALIZAR
Algunos ejemplos útiles y solución de problemas se pueden encontrar aquí: Android Shared Preference TinyDB putListObject frunction
fuente
tinydb.putList()
Mire los ejemplos en la página vinculada.Guardando
Array
enSharedPreferences
:Cargando
Array
datos deSharedPreferences
fuente
ArrayList
enSharedPrefeneces
usted podría utilizarmEdit1.clear()
para evitar esto.Puede convertirlo
JSON String
y almacenar la cadena enSharedPreferences
.fuente
Como dijo @nirav, la mejor solución es almacenarlo en SharedPrefernces como un texto json utilizando la clase de utilidad Gson. Debajo del código de muestra:
fuente
Hola amigos, obtuve la solución del problema anterior sin usar
Gson
biblioteca. Aquí publico el código fuente.1. Declaración variable, es decir
2.Inicialización variable, es decir
3. Almacene el valor en sharedPreference usando
packagesharedPreferences()
:4. Recuperar el valor de sharedPreference usando
retriveSharedValue()
:Espero que te sea útil ...
fuente
String
s?JAVA:
Kotlin
fuente
Android SharedPreferances le permite guardar tipos primitivos (Boolean, Float, Int, Long, String y StringSet que están disponibles desde API11) en la memoria como un archivo xml.
La idea clave de cualquier solución sería convertir los datos a uno de esos tipos primitivos.
Personalmente me encanta convertir mi lista a formato json y luego guardarla como una Cadena en un valor de Preferencias Compartidas.
Para utilizar mi solución, deberá agregar Google Gson lib.
En gradle simplemente agregue la siguiente dependencia (use la última versión de google):
Guardar datos (donde HttpParam es su objeto):
Recuperar datos (donde HttpParam es su objeto):
fuente
Esta es tu solución perfecta ... pruébalo,
fuente
También puede convertir la lista de arrays en una cadena y guardarla con preferencia
Puede guardar la Arraylist después de convertirla en cadena usando el
convertToString
método y recuperar la cadena y convertirla en matriz usandoconvertToArray
¡Después de API 11, puede guardar el conjunto directamente en SharedPreferences ! :)
fuente
Para String, int, boolean, la mejor opción sería sharedPreferences.
Si desea almacenar ArrayList o cualquier información compleja. La mejor opción sería la biblioteca de papel.
Agregar dependencia
Inicializar papel
Debe inicializarse una vez en Application.onCreate ():
Salvar
Cargando datos
Utilice valores predeterminados si el objeto no existe en el almacenamiento.
Aqui tienes.
https://github.com/pilgr/Paper
fuente
He leído todas las respuestas anteriores. Eso es todo correcto, pero encontré una solución más fácil como a continuación:
Guardar lista de cadenas en preferencia compartida >>
}
y para obtener la lista de cadenas de preferencia compartida >>
Aquí
Constants.APP_PREFS
está el nombre del archivo a abrir; no puede contener separadores de ruta.fuente
También con Kotlin:
fuente
La mejor manera es convertirlo a una cadena JSOn usando GSON y guardar esta cadena en SharedPreference. También uso esta forma para almacenar en caché las respuestas.
fuente
Puede guardar cadenas y listas de matrices personalizadas utilizando la biblioteca Gson.
=> Primero necesita crear una función para guardar la lista de matrices en SharedPreferences.
=> Necesita crear una función para obtener una lista de matriz de SharedPreferences.
=> Cómo llamar a guardar y recuperar la función de lista de matriz.
=> No olvide agregar la biblioteca gson en su nivel de aplicación build.gradle.
implementación 'com.google.code.gson: gson: 2.8.2'
fuente
Puede consultar las funciones serializeKey () y deserializeKey () de la clase SharedPreferencesTokenCache de FacebookSDK. Convierte el tipo compatible en el objeto JSON y almacena la cadena JSON en SharedPreferences . Puedes descargar SDK desde aquí
fuente
¿Por qué no pegas tu lista de arrays en una clase de aplicación? Solo se destruye cuando la aplicación se mata realmente , por lo que permanecerá durante el tiempo que la aplicación esté disponible.
fuente
La mejor manera que he podido encontrar es hacer una matriz 2D de claves y colocar los elementos personalizados de la matriz en la matriz 2D de teclas y luego recuperarla a través de la matriz 2D al inicio. No me gustó la idea de usar el conjunto de cadenas porque la mayoría de los usuarios de Android todavía están en Gingerbread y el uso del conjunto de cadenas requiere panal.
Código de muestra: aquí ditor es el editor de preferencias compartido y rowitem es mi objeto personalizado.
fuente
El siguiente código es la respuesta aceptada, con algunas líneas más para gente nueva (yo), por ejemplo. muestra cómo volver a convertir el objeto de tipo set en arrayList, y una guía adicional sobre lo que sucede antes de '.putStringSet' y '.getStringSet'. (gracias malvado)
fuente
fuente
no olvides implementar Serializable:
https://stackoverflow.com/a/7635154/4639974
fuente
Puede usar la serialización o la biblioteca Gson para convertir la lista a cadena y viceversa y luego guardar la cadena en las preferencias.
Usando la biblioteca Gson de google:
Usando la serialización de Java:
fuente
Este método se utiliza para almacenar / guardar la lista de la matriz: -
Este método se utiliza para recuperar la lista de matriz: -
fuente
Puede convertirlo en un
Map
Objeto para almacenarlo, luego volver a cambiar los valores a ArrayList cuando recupere elSharedPreferences
.fuente
Use esta clase personalizada:
Cómo utilizar:
fuente
Esto debería funcionar:
ellos, para atraparlo solo:
esto funciona para mi.
fuente
Mi clase de utilidades para guardar lista en
SharedPreferences
Utilizando
.
Código completo de mis utilidades // verificar usando el ejemplo en Código de actividad
fuente
Utilicé la misma manera de guardar y recuperar una cadena, pero aquí con arrayList he utilizado HashSet como mediador
Para guardar arrayList en SharedPreferences utilizamos HashSet:
1- creamos la variable SharedPreferences (en el lugar donde ocurre el cambio en la matriz)
2 - convertimos el arrayList a HashSet
3 - luego ponemos el stringSet y aplicamos
4: obtienes SetStringSet dentro de HashSet y vuelves a crear ArrayList para configurar HashSet.
fuente
fuente
Todas las respuestas anteriores son correctas. :) Yo mismo usé uno de estos para mi situación. Sin embargo, cuando leí la pregunta, descubrí que el OP en realidad está hablando de un escenario diferente al título de esta publicación, si no me equivoqué.
"Necesito que la matriz permanezca, incluso si el usuario deja la actividad y luego quiere volver más tarde"
En realidad, quiere que los datos se almacenen hasta que la aplicación esté abierta, independientemente de que el usuario cambie las pantallas dentro de la aplicación.
"Sin embargo, no necesito la matriz disponible después de que la aplicación se haya cerrado por completo"
Pero una vez que la aplicación se cierra, los datos no deben conservarse.
SharedPreferences
no es la forma óptima de hacerlo.Lo que se puede hacer para este requisito es crear una clase que extienda la
Application
clase.Usando el setter y getter, se puede acceder a ArrayList desde cualquier lugar dentro de la Aplicación. Y la mejor parte es que una vez que se cierra la aplicación, no tenemos que preocuparnos por los datos que se almacenan. :)
fuente