Eu tenho um ArrayList
com objetos personalizados. Cada objeto personalizado contém uma variedade de cadeias e números. Eu preciso que a matriz permaneça, mesmo que o usuário saia da atividade e depois queira voltar mais tarde; no entanto, não preciso da matriz disponível depois que o aplicativo for completamente fechado. Salvei muitos outros objetos dessa maneira usando o SharedPreferences
mas não consigo descobrir como salvar toda a minha matriz dessa maneira. Isso é possível? Talvez SharedPreferences
não seja esse o caminho? Existe um método mais simples?
android
arraylist
sharedpreferences
ryandlf
fonte
fonte
Respostas:
Após a API 11,
SharedPreferences Editor
aceiteSets
. Você pode converter sua lista emHashSet
algo semelhante e armazená-la assim. Quando você ler novamente, converta-o em umArrayList
, classifique-o se necessário e pronto.Você também pode serializar seu
ArrayList
e salvar / ler de / paraSharedPreferences
. Abaixo está a solução:EDIT:
Ok, abaixo está a solução para salvar
ArrayList
como objeto serializadoSharedPreferences
e, em seguida, lê-lo em SharedPreferences.Como a API suporta apenas o armazenamento e a recuperação de strings de / para SharedPreferences (após a API 11, sua mais simples), precisamos serializar e desserializar o objeto ArrayList que possui a lista de tarefas na string.
No
addTask()
método da classe TaskManagerApplication, precisamos obter a instância da preferência compartilhada e, em seguida, armazenar o ArrayList serializado usando oputString()
método:Da mesma forma, temos que recuperar a lista de tarefas da preferência no
onCreate()
método:Você pode obter
ObjectSerializer
classe no projeto Object Apex Pig ObjectSerializer.javafonte
putStringSet
foi adicionado à API 11. A maioria dos programadores atuais visa a concessão da API 8 (Froyo).scoreEditor
?Usando este objeto -> TinyDB - Android-Shared-Preferences-Turbo é muito simples.
colocar
para obter
ATUALIZAR
Alguns exemplos úteis e solução de problemas podem ser encontrados aqui: Preferência compartilhada do Android TinyDB putListObject frunction
fonte
tinydb.putList()
Veja os exemplos na página vinculada.Salvando
Array
emSharedPreferences
:Carregando
Array
dados deSharedPreferences
fonte
ArrayList
emSharedPrefeneces
que você pode usarmEdit1.clear()
para evitar isso.Você pode convertê-lo
JSON String
e armazenar a string no arquivoSharedPreferences
.fonte
Como o @nirav disse, a melhor solução é armazená-lo no sharedPrefernces como um texto json usando a classe de utilitário Gson. Abaixo código de exemplo:
fonte
Ei amigos, eu tenho a solução do problema acima sem usar a
Gson
biblioteca. Aqui eu posto o código fonte.1.Variável declaração ou seja
2. Inicialização variável, isto é
3. Armazene o valor em sharedPreference usando
packagesharedPreferences()
:Valor 4.Retrive de sharedPreference usando
retriveSharedValue()
:Espero que seja útil para você ...
fonte
String
s?JAVA:
Kotlin
fonte
O Android SharedPreferances permite salvar tipos primitivos (Boolean, Float, Int, Long, String e StringSet, disponíveis desde a API11) na memória como um arquivo xml.
A idéia principal de qualquer solução seria converter os dados em um desses tipos primitivos.
Pessoalmente, adoro converter a minha lista no formato json e salvá-la como uma String em um valor SharedPreferences.
Para usar minha solução, você precisará adicionar a lib do Google Gson .
Em gradle, adicione a seguinte dependência (use a versão mais recente do google):
Salve os dados (onde HttpParam é seu objeto):
Recuperar dados (onde HttpParam é seu objeto):
fonte
Esta é a sua solução perfeita. Experimente,
fonte
Você também pode converter o arraylist em uma String e salvá-lo na preferência
Você pode salvar a Lista de matriz após convertê-la em sequência usando o
convertToString
método e recuperar a sequência e convertê-la em matriz usandoconvertToArray
Após a API 11, você pode salvar o conjunto diretamente em SharedPreferences !!! :)
fonte
Para String, int, boolean, a melhor opção seria sharedPreferences.
Se você deseja armazenar ArrayList ou qualquer dado complexo. A melhor opção seria a biblioteca de papel.
Adicionar dependência
Inicializar trabalho
Deve ser inicializado uma vez em Application.onCreate ():
Salve
Carregando dados
Use valores padrão se o objeto não existir no armazenamento.
Aqui está.
https://github.com/pilgr/Paper
fonte
Eu li todas as respostas acima. Está tudo correto, mas eu encontrei uma solução mais fácil, como abaixo:
Salvando a lista de strings na preferência compartilhada >>
}
e para obter a Lista de cadeias de preferência compartilhada >>
Aqui
Constants.APP_PREFS
está o nome do arquivo a ser aberto; não pode conter separadores de caminho.fonte
Também com Kotlin:
fonte
A melhor maneira é converter para string JSOn usando GSON e salvar essa string em SharedPreference. Eu também uso esse caminho para armazenar respostas em cache.
fonte
Você pode salvar String e lista de matrizes personalizadas usando a biblioteca Gson.
=> Primeiro você precisa criar uma função para salvar a lista de matrizes em SharedPreferences.
=> Você precisa criar uma função para obter a lista de matrizes de SharedPreferences.
=> Como chamar a função de salvar e recuperar a lista de matrizes.
=> Não se esqueça de adicionar a biblioteca gson no seu build.gradle no nível do aplicativo.
implementação 'com.google.code.gson: gson: 2.8.2'
fonte
Você pode consultar as funções serializeKey () e deserializeKey () da classe SharedPreferencesTokenCache do FacebookSDK. Ele converte o supportedType no objeto JSON e armazena a sequência JSON em SharedPreferences . Você pode fazer o download do SDK aqui
fonte
Por que você não coloca sua lista de matrizes em uma classe Application? Ele só é destruído quando o aplicativo é realmente morto; portanto, ele permanecerá por enquanto o aplicativo estiver disponível.
fonte
A melhor maneira que eu consegui encontrar é criar uma matriz de chaves 2D e colocar os itens personalizados da matriz na matriz de chaves 2D e, em seguida, recuperá-la através da matriz 2D na inicialização. Eu não gostei da idéia de usar o conjunto de strings, porque a maioria dos usuários do Android ainda está no Gingerbread e o uso do conjunto de strings requer favo de mel.
Código de amostra: aqui o ditor é o editor pref compartilhado e o rowitem é o meu objeto personalizado.
fonte
O código a seguir é a resposta aceita, com mais algumas linhas para pessoas novas (eu), por exemplo. mostra como converter o objeto do tipo set novamente em arrayList e orientações adicionais sobre o que antecede '.putStringSet' e '.getStringSet'. (obrigado evilone)
fonte
fonte
não esqueça de implementar Serializable:
https://stackoverflow.com/a/7635154/4639974
fonte
Você pode usar a serialização ou a biblioteca Gson para converter a lista em sequência e vice-versa e salvar a sequência nas preferências.
Usando a biblioteca Gson do google:
Usando serialização Java:
fonte
Este método é usado para armazenar / salvar a lista de matrizes: -
Este método é usado para recuperar a lista de matrizes: -
fonte
Você pode convertê-lo em um
Map
objeto para armazená-lo e alterar os valores novamente para um ArrayList quando recuperar oSharedPreferences
.fonte
Use esta classe personalizada:
Como usar:
fonte
isso deve funcionar:
eles, para entender apenas:
funciona para mim.
fonte
Minha classe utils para salvar a lista em
SharedPreferences
Usando
.
Código completo dos meus utilitários // verifique usando o exemplo no código de atividade
fonte
Eu usei a mesma maneira de salvar e recuperar uma String, mas aqui com arrayList eu usei o HashSet como mediador
Para salvar arrayList em SharedPreferences, usamos HashSet:
1- criamos a variável SharedPreferences (no local em que a alteração ocorre na matriz)
2 - convertemos o arrayList em HashSet
3 - depois colocamos o stringSet e aplicamos
4 - você obtémStringSet no HashSet e recria ArrayList para definir o HashSet.
fonte
fonte
Todas as respostas acima estão corretas. :) Eu mesmo usei um desses para a minha situação. No entanto, quando li a pergunta, descobri que o OP realmente está falando sobre um cenário diferente do título deste post, se eu não entendi errado.
"Eu preciso que a matriz permaneça, mesmo que o usuário saia da atividade e depois queira voltar mais tarde"
Na verdade, ele deseja que os dados sejam armazenados até que o aplicativo seja aberto, independentemente da alteração das telas do usuário no aplicativo.
"no entanto, não preciso da matriz disponível depois que o aplicativo foi completamente fechado"
Mas, quando o aplicativo é fechado, os dados não devem ser preservados.
SharedPreferences
.O que se pode fazer por esse requisito é criar uma classe que estenda a
Application
classe.Usando o setter e o getter, o ArrayList pode ser acessado de qualquer lugar dentro do Aplicativo. E a melhor parte é que, quando o aplicativo é fechado, não precisamos nos preocupar com os dados que estão sendo armazenados. :)
fonte