Saya punya ArrayList
dengan objek khusus. Setiap objek khusus berisi berbagai string dan angka. Saya perlu array untuk tetap bertahan bahkan jika pengguna meninggalkan aktivitas dan kemudian ingin kembali lagi nanti, namun saya tidak perlu array tersedia setelah aplikasi telah ditutup sepenuhnya. Saya menyimpan banyak objek lain dengan cara ini dengan menggunakan SharedPreferences
tetapi saya tidak tahu bagaimana cara menyimpan seluruh array saya dengan cara ini. Apakah ini mungkin? Mungkin SharedPreferences
bukan cara untuk menyelesaikan ini? Apakah ada metode yang lebih sederhana?
android
arraylist
sharedpreferences
ryandlf
sumber
sumber
Jawaban:
Setelah API 11
SharedPreferences Editor
menerimaSets
. Anda dapat mengubah Daftar Anda menjadiHashSet
sesuatu yang serupa dan menyimpannya seperti itu. Ketika Anda membacanya kembali, ubah menjadiArrayList
, urutkan jika perlu dan Anda siap melakukannya.Anda juga dapat membuat cerita bersambung dari Anda
ArrayList
dan kemudian menyimpan / membacanya ke / dariSharedPreferences
. Di bawah ini solusinya:EDIT:
Ok, di bawah ini adalah solusi untuk menyimpan
ArrayList
objek serialSharedPreferences
dan kemudian membacanya dari SharedPreferences.Karena API hanya mendukung penyimpanan dan pengambilan string ke / dari SharedPreferences (setelah API 11, lebih sederhana), kita harus membuat cerita bersambung dan menghilangkan urutan objek ArrayList yang memiliki daftar tugas menjadi string.
Dalam
addTask()
metode kelas TaskManagerApplication, kita harus mendapatkan instance dari preferensi bersama dan kemudian menyimpan ArrayList serial menggunakanputString()
metode:Demikian pula kita harus mengambil daftar tugas dari preferensi dalam
onCreate()
metode:Anda bisa mendapatkan
ObjectSerializer
kelas dari proyek Apache Pig ObjectSerializer.javasumber
putStringSet
ditambahkan di API 11. Sebagian besar programer saat ini menargetkan sewa API 8 (Froyo).scoreEditor
?Menggunakan objek ini -> TinyDB - Android-Shared-Preferences-Turbo sangat sederhana.
untuk dimasukkan
mendapatkan
MEMPERBARUI
Beberapa contoh dan pemecahan masalah yang berguna dapat ditemukan di sini: Preferensi Berbagi Android TinyDB putListObject
sumber
tinydb.putList()
Lihat contoh di halaman yang ditautkan.Menyimpan
Array
dalamSharedPreferences
:Memuat
Array
Data dariSharedPreferences
sumber
ArrayList
ke dalamSharedPrefeneces
yang dapat Anda gunakanmEdit1.clear()
untuk menghindari ini.Anda dapat mengonversinya ke
JSON String
dan menyimpan string diSharedPreferences
.sumber
Seperti yang dikatakan @nirav, solusi terbaik adalah menyimpannya di sharedPrefernces sebagai teks json dengan menggunakan kelas utilitas Gson. Di bawah kode sampel:
sumber
Hai teman-teman saya mendapat solusi dari masalah di atas tanpa menggunakan
Gson
perpustakaan. Di sini saya memposting kode sumber.Deklarasi 1.Variable yaitu
Inisialisasi 2.Variabel yaitu
Nilai 3.Store ke sharedPreference menggunakan
packagesharedPreferences()
:4. Kembalikan nilai sharedPreference menggunakan
retriveSharedValue()
:Saya harap ini akan membantu Anda ...
sumber
String
s?JAWA:
Kotlin
sumber
Preferensi Android Shared memungkinkan Anda untuk menyimpan tipe primitif (Boolean, Float, Int, Long, String, dan StringSet yang tersedia sejak API11) dalam memori sebagai file xml.
Gagasan kunci dari solusi apa pun adalah mengubah data menjadi salah satu dari tipe primitif tersebut.
Saya pribadi suka mengonversi daftar saya ke format json dan kemudian menyimpannya sebagai String dalam nilai SharedPreferences.
Untuk menggunakan solusi saya, Anda harus menambahkan Google Gson lib.
Secara bertahap tambahkan saja ketergantungan berikut (silakan gunakan versi terbaru google):
Simpan data (di mana HttpParam adalah objek Anda):
Ambil Data (di mana HttpParam adalah objek Anda):
sumber
Ini adalah solusi sempurna Anda .. cobalah,
sumber
Anda juga dapat mengubah daftar array menjadi sebuah String dan menyimpannya dalam preferensi
Anda dapat menyimpan Arraylist setelah mengubahnya menjadi string menggunakan
convertToString
metode dan mengambil string dan mengubahnya menjadi array menggunakanconvertToArray
Setelah API 11, Anda dapat menyimpan set langsung ke SharedPreferences !!! :)
sumber
Untuk String, int, boolean, pilihan terbaik adalah sharedPreferences.
Jika Anda ingin menyimpan ArrayList atau data kompleks apa pun. Pilihan terbaik adalah Pustaka kertas.
Tambahkan ketergantungan
Inisialisasi Kertas
Harus diinisialisasi sekali di Application.onCreate ():
Menyimpan
Memuat data
Gunakan nilai default jika objek tidak ada di penyimpanan.
Ini dia
https://github.com/pilgr/Paper
sumber
Saya sudah membaca semua jawaban di atas. Itu semua benar tetapi saya menemukan solusi yang lebih mudah seperti di bawah ini:
Menyimpan Daftar String di preferensi bersama >>
}
dan untuk mendapatkan Daftar String dari preferensi-Bersama >>
Ini
Constants.APP_PREFS
adalah nama file yang akan dibuka; tidak dapat mengandung pemisah jalur.sumber
Juga dengan Kotlin:
sumber
Cara terbaik adalah mengonversi ke string JSOn menggunakan GSON dan menyimpan string ini ke SharedPreference. Saya juga menggunakan cara ini untuk menyimpan tanggapan.
sumber
Anda dapat menyimpan String dan daftar larik khusus menggunakan pustaka Gson.
=> Pertama, Anda perlu membuat fungsi untuk menyimpan daftar array ke SharedPreferences.
=> Anda perlu membuat fungsi untuk mendapatkan daftar array dari SharedPreferences.
=> Cara memanggil menyimpan dan mengambil fungsi daftar array.
=> Jangan lupa menambahkan pustaka gson di build.gradle tingkat aplikasi Anda.
implementasi 'com.google.code.gson: gson: 2.8.2'
sumber
Anda bisa merujuk fungsi serializeKey () dan deserializeKey () dari kelas SharedPreferencesTokenCache FacebookSDK. Itu mengkonversi tipe yang didukung ke objek JSON dan menyimpan string JSON ke SharedPreferences . Anda dapat mengunduh SDK dari sini
sumber
Mengapa Anda tidak menempel daftar array Anda pada kelas Aplikasi? Itu hanya hancur ketika aplikasi benar - benar terbunuh, jadi, itu akan bertahan selama aplikasi tersedia.
sumber
Cara terbaik yang saya dapat temukan adalah membuat 2D Array kunci dan meletakkan item kustom dari array dalam 2-D array kunci dan kemudian mengambilnya melalui 2D arra pada startup. Saya tidak menyukai gagasan untuk menggunakan rangkaian string karena sebagian besar pengguna android masih menggunakan Gingerbread dan menggunakan rangkaian string memerlukan honeycomb.
Kode Contoh: di sini ditor adalah editor preferensi bersama dan rowitem adalah objek khusus saya.
sumber
kode berikut adalah jawaban yang diterima, dengan beberapa baris lagi untuk orang baru (saya), mis. menunjukkan bagaimana mengkonversi objek tipe set kembali ke arrayList, dan panduan tambahan tentang apa yang terjadi sebelum '.putStringSet' dan '.getStringSet'. (terima kasih evilone)
sumber
sumber
jangan lupa untuk mengimplementasikan Serializable:
https://stackoverflow.com/a/7635154/4639974
sumber
Anda dapat menggunakan serialisasi atau pustaka Gson untuk mengonversi daftar menjadi string dan sebaliknya dan kemudian menyimpan string dalam preferensi.
Menggunakan perpustakaan Google Gson:
Menggunakan serialisasi Java:
sumber
Metode ini digunakan untuk menyimpan / menyimpan daftar array: -
Metode ini digunakan untuk mengambil daftar array: -
sumber
Anda bisa mengonversinya menjadi
Map
Obyek untuk menyimpannya, lalu mengubah nilai kembali ke ArrayList ketika Anda mengambilSharedPreferences
.sumber
Gunakan kelas khusus ini:
Cara Penggunaan:
sumber
ini harus bekerja:
mereka, untuk menangkapnya saja:
ini bekerja untuk saya.
sumber
Kelas utilitas saya untuk menyimpan daftar
SharedPreferences
Menggunakan
.
Kode lengkap utils saya // periksa menggunakan contoh dalam kode Kegiatan
sumber
Saya menggunakan cara yang sama untuk menyimpan dan mengambil sebuah String tetapi di sini dengan arrayList saya telah menggunakan HashSet sebagai mediator
Untuk menyimpan arrayList ke SharedPreferences, kami menggunakan HashSet:
1- kita membuat variabel SharedPreferences (di tempat perubahan terjadi pada array)
2 - kami mengonversi arrayList menjadi HashSet
3 - lalu kita letakkan stringSet dan terapkan
4 - Anda mendapatkanStringSet dalam HashSet dan membuat ulang ArrayList untuk mengatur HashSet.
sumber
sumber
Semua jawaban di atas benar. :) Saya sendiri menggunakan salah satunya untuk situasi saya. Namun ketika saya membaca pertanyaan saya menemukan bahwa OP sebenarnya berbicara tentang skenario yang berbeda dari judul posting ini, jika saya tidak salah.
"Saya perlu array untuk tetap bertahan bahkan jika pengguna meninggalkan aktivitas dan kemudian ingin kembali lagi nanti"
Dia benar-benar ingin data disimpan sampai aplikasi terbuka, terlepas dari perubahan layar pengguna dalam aplikasi.
"Namun saya tidak perlu array tersedia setelah aplikasi telah ditutup sepenuhnya"
Tapi begitu aplikasi ditutup data jangan dilestarikan. Karenanya saya merasa menggunakan
SharedPreferences
bukan cara yang optimal untuk ini.Apa yang bisa dilakukan untuk persyaratan ini adalah membuat kelas yang memperluas
Application
kelas.Dengan menggunakan setter dan pengambil, ArrayList dapat diakses dari mana saja dengan Aplikasi. Dan bagian terbaiknya adalah begitu aplikasi ditutup, kita tidak perlu khawatir tentang data yang disimpan. :)
sumber