Musimy zdobyć obiekty użytkownika w wielu miejscach, które zawierają wiele pól. Po zalogowaniu chcę zapisać / zapisać te obiekty użytkownika. Jak możemy wdrożyć tego rodzaju scenariusz?
Nie mogę tego tak przechowywać:
SharedPreferences.Editor prefsEditor = myPrefs.edit();
prefsEditor.putString("BusinessUnit", strBusinessUnit);
android
sharedpreferences
Piraba
źródło
źródło
Odpowiedzi:
Możesz użyć gson.jar do przechowywania obiektów klasy w SharedPreferences . Możesz pobrać ten słoik z google-gson
Lub dodaj zależność GSON do pliku Gradle:
Tworzenie wspólnych preferencji:
Zapisać:
Aby pobrać:
źródło
Aby dodać do odpowiedzi @ MuhammadAamirALi, możesz użyć Gsona, aby zapisać i pobrać listę obiektów
Zapisz listę obiektów zdefiniowanych przez użytkownika w SharedPreferences
Pobierz listę obiektów zdefiniowanych przez użytkownika z SharedPreferences
źródło
Wiem, że ten wątek jest trochę stary. Ale i tak to opublikuję, mając nadzieję, że może komuś pomóc. Możemy przechowywać pola dowolnego obiektu do wspólnych preferencji , serializując obiekt do ciągu. Tutaj użyłem
GSON
do przechowywania dowolnego obiektu do wspólnych preferencji.Zapisz obiekt w preferencjach:
Pobierz obiekt z preferencji:
Uwaga :
Pamiętaj, aby dodać
compile 'com.google.code.gson:gson:2.6.2'
dodependencies
swojej oceny.Przykład :
Aktualizacja:
Jak wskazał @Sharp_Edge w komentarzach, powyższe rozwiązanie nie działa
List
.Niewielka modyfikacja podpisu
getSavedObjectFromPreference()
- odClass<GenericClass> classType
doType classType
spowoduje uogólnienie tego rozwiązania. Zmodyfikowana sygnatura funkcji,Za wywołanie
Happy Coding!
źródło
commit
zamiastapply
. To może ci pomóc.List<CustomClass>
jak mam to zrobić?getSavedObjectFromPreference(context, "mPreference", "mObjectKey", SampleClass.class)
nie akceptujeList<CustomClass>.class
:(Lepiej jest stworzyć globalną
Constants
klasę do zapisywania klucza lub zmiennych w celu pobierania lub zapisywania danych.Aby zapisać dane, wywołaj tę metodę, aby zapisać dane z dowolnego miejsca.
Użyj go, aby uzyskać dane.
i metoda taka jak ta załatwi sprawę
źródło
Wypróbuj ten najlepszy sposób:
PreferenceConnector.java
Napisz wartość:
I uzyskaj wartość, używając:
źródło
return PreferenceManager.getDefaultSharedPreferences(context);
zamiastreturn context.getSharedPreferences(PREF_NAME, MODE);
Po tym nie określiłeś, co robisz z
prefsEditor
obiektem, ale aby zachować dane preferencji, musisz również użyć:źródło
Zobacz tutaj, to może ci pomóc:
https://github.com/AltasT/PreferenceVObjectFile/blob/master/PreferenceVObjectFile/src/com/altas/lib/PreferenceUtils.java
źródło
Innym sposobem zapisywania i przywracania obiektu z udostępnionych preferencji Androida bez użycia formatu Json
źródło
Możesz zapisać obiekt w preferencjach bez użycia biblioteki, przede wszystkim klasa obiektów musi implementować Serializable:
}
Następnie możesz łatwo użyć tych dwóch metod do konwersji obiektu na ciąg i ciągu na obiekt:
Zapisać:
Czytać
źródło
Krok 1: Skopiuj wklej te dwie funkcje do pliku Java.
Krok 2: aby zapisać użyj:
aby pobrać użyj:
Możesz ustawić różne preferencje wspólne, używając różnych nazw kluczy, takich jak:
źródło
Jeśli chcesz przechowywać cały obiekt, który otrzymujesz w odpowiedzi, możesz to osiągnąć, robiąc coś takiego,
Najpierw utwórz metodę, która konwertuje JSON na ciąg znaków w klasie util, jak poniżej.
Następnie w klasie wspólnych preferencji Zrób coś takiego,
a następnie utwórz metodę getPreferences
Następnie po prostu wywołaj pierwszą metodę, gdy otrzymasz odpowiedź, i drugą, gdy musisz uzyskać dane z preferencji udostępniania, takich jak
to wszystko.
Mam nadzieję, że ci to pomoże.
Happy Coding();
źródło
Miałem problem z użyciem zaakceptowanej odpowiedzi w celu uzyskania dostępu do danych Preferencji wspólnych dla różnych działań. W tych krokach nadajesz nazwę getSharedPreferences, aby uzyskać do niej dostęp.
Dodaj następującą zależność w pliku build.gradel (Module: app) w części Skrypty gradle:
Zapisać:
Aby pobrać inną aktywność:
źródło
mam nadzieję, że to ci pomoże :)
źródło
Oto omówienie korzystania z właściwości delegowanych Kotlin, które wybrałem stąd , ale rozwinąłem i pozwala na prosty mechanizm pobierania / ustawiania właściwości SharedPreference.
Na
String
,Int
,Long
,Float
iBoolean
, że stosuje się standardową metodę pobierania SharePreference (ów) i ustawiającą (S). Jednak dla wszystkich innych klas danych używa GSON do serializacji do aString
dla setera. Następnie deserializuje do obiektu danych dla gettera.Podobnie jak w przypadku innych rozwiązań, wymaga to dodania GSON jako zależności w pliku oceny:
Oto przykład prostej klasy danych, którą chcielibyśmy móc zapisać i przechowywać w SharedPreferences:
Oto jedna klasa, która implementuje delegatów właściwości:
Uwaga: nie musisz niczego aktualizować w
sealed class
. Te przekazane właściwości są przedmiotem / Singleton'yUserPreferenceProperty
,NullableUserPreferenceProperty
iFirstTimeUser
.Aby skonfigurować nowy obiekt danych do zapisywania / pobierania z SharedPreferences, jest teraz tak proste, jak dodanie czterech linii:
Wreszcie możesz odczytywać / zapisywać wartości w SharedPreferences, używając tylko
by
słowa kluczowego:źródło
Jeśli Twój obiekt jest złożony, sugeruję Serializację / XML / JSON i zapisanie tych treści na karcie SD. Dodatkowe informacje na temat zapisywania w pamięci zewnętrznej można znaleźć tutaj: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
źródło
są dwa pliki rozwiązujące cały problem dotyczący wspólnych preferencji
1) AppPersistence.java
2) AppPreference.java
teraz możesz zapisać, usunąć lub uzyskać,
-zapisać
-usunąć
-dostać
źródło
Przechowuj dane w SharedPreference
źródło
Moja klasa utils do listy zapisywania w
SharedPreferences
Za pomocą
.
Pełny kod moich narzędzi // sprawdź, korzystając z przykładu w kodzie działania
źródło
Dodano bibliotekę Jacksona do oceny:
Moja klasa testowa:
Obiekt Java do JSON:
Zapisz go we wspólnych preferencjach:
Przywróć z wspólnych preferencji:
źródło