როგორ შეიძლება მონაცემები ფრეაგმენტის გარეთ შევინახოთ?
sobes.tech AI
პასუხი AI-სგან
ფრაგმენტის გარეთ მონაცემების შენახვის რამდენიმე გზა არსებობს:
-
ViewModel: იდეალურია UI-სთან დაკავშირებული მონაცემების შენახვისთვის, ცოცხალი ციკლისAware მეთოდით. გადარჩება კონფიგურაციის ცვლილებებისას.class MyViewModel : ViewModel() { var data: String = "" } -
აქტივობა: ფრაგმენტები შეიძლება ურთიერთქმედებდეს კონტეინერული აქტივობისთან (მაგალითად, ინტერფეისის მეშვეობით ან პირდაპირ), სადაც აქტივობა შეიძლება შეინახოს მონაცემები.
// აქტივობაში var sharedData: String = "" // ფრაგმენტში (activity as? MyActivity)?.sharedData = "შენახული ფრაგმენტიდან" -
Shared Preferences: მარტივი გზა პრიმიტიული მონაცემების (პატარა მოცულობის) შენახვისთვის.
// ფრაგმენტში val sharedPref = activity?.getSharedPreferences("my_prefs", Context.MODE_PRIVATE) ?: return with(sharedPref.edit()) { putString("saved_string", "ჩემი მონაცემები") apply() // ან commit() სინქრონული შენახვისთვის } -
SQLite მონაცემთა ბაზა: სტრუქტურირებული მონაცემებისთვის და უფრო რთული სვეტებისთვის.
-- SQL-ის მაგალითი CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT); -
Room Persistence Library: აბსტრაქცია SQLite-ის ზედა, რომელიც გამარტივებს მონაცემთა ბაზასთან მუშაობას.
// Room Entity-ის მაგალითი @Entity data class User( @PrimaryKey val id: Int, val name: String ) -
DataStore: თანამედროვე ალტერნატივა Shared Preferences-ის, რომელიც საშუალებას აძლევს მონაცემების ასინქრონულ და უსაფრთხო შენახვას.
// DataStore Prefs-ის მაგალითი val EXAMPLE_COUNTER = intPreferencesKey("example_counter") // ფრაგმენტში context?.dataStore?.edit { settings -> val currentCounter = settings[EXAMPLE_COUNTER] ?: 0 settings[EXAMPLE_COUNTER] = currentCounter + 1 } -
შიდა/გარე შენახვა: ფაილების შენახვა.
// ფაილში წერა val filename = "my_data.txt" val fileContents = "გამარჯობა, მსოფლიო!" context?.openFileOutput(filename, Context.MODE_PRIVATE)?.use { it.write(fileContents.toByteArray()) } -
Singleton: გლობალური კლასის მაგალითი მონაცემების შენახვისთვის, რომელიც ხელმისაწვდომია პროგრამის ნებისმიერ ნაწილში. უნდა გამოიყენოს ყურადღებით, რადგან შეიძლება გამოიწვიოს ტესტირების და მეხსიერების გაჟონვის პრობლემები.
object DataManager { var sharedData: String = "" } -
აპლიკაციის კლასი: კლასი, რომელიც განავრცობს
Application-ს, არის გლობალური მთელი პროგრამისთვის და შეუძლია მონაცემების შენახვა.class MyApp : Application() { var globalData: String = "" }