Sobes.tech
Middle

Milliseid alternatiive SharedPreferences'ile saate pakkuda andmete salvestamiseks Androidis?

sobes.tech AI

Vastus AI-lt

  • Room Persistence Library: Abstraktsioon SQLite'i üle. Pakub tüübitud juurdepääsu andmetele DAO (Data Access Objects) kaudu, toetab Coroutines ja Flow. Sobib struktureeritud ja relatsiooniliste andmete jaoks:

    // Näide päringust 
    @Dao
    interface UserDao {
        @Query("SELECT * FROM users WHERE id = :userId")
        suspend fun getUserById(userId: Int): User?
    }
    
  • DataStore: Kaasaegsem alternatiiv SharedPreferences-le Google'ilt. Lahendab SharedPreferences probleeme, nagu järjepidevuse turvalisus ja UI niidi blokeerimine. On kaks rakendusviisi: Preferences DataStore (sarnane SharedPreferences) ja Proto DataStore (tüübitud andmetele Protocol Buffers'iga). Kasutab Kotlin Coroutines ja Flow.

    // Näide lugemisest Preferences DataStore'ist
    val exampleCounterFlow: Flow<Int> = context.dataStore.data
        .map { preferences ->
            preferences[EXAMPLE_COUNTER] ?: 0
        }
    
  • Sisemine/väline salvestus (failid): Kasutatakse suurte struktureerimata andmete salvestamiseks, näiteks meediafailid või kohandatud formaadid. Nõuab selget juurdepääsu ja luba haldust.

    // Näide kirjutamisest faili sisemisse salvestusse
    String filename = "myapplicationdata";
    String fileContents = "Hello world!";
    try (FileOutputStream fos = context.openFileOutput(filename, Context.MODE_PRIVATE)) {
        fos.write(fileContents.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    }
    
  • SQLiteDatabase: Madala taseme juurdepääs sisseehitatud SQLite andmebaasile. Nõuab SQL-päringute kirjutamist ja andmebaasi käsitsi haldamist (avatud, suletud, versioonide haldamine). Room on soovitatav alternatiiv enamikul juhtudel.

    -- Näide SQL-päringust
    SELECT column1, column2 FROM table_name WHERE condition;
    
  • Välised pilveteenused: Firebase Realtime Database, Firestore. Andmete sünkroniseerimine seadmete vahel, varundused ja ühiskasutus. Nõuab internetiühendust ja konfliktide lahendamist.

Valik sõltub andmetüüpidest, mahust, struktuurist, sünkroniseerimise vajadusest ja jõudlusnõuetest. Väikeste võtme-väärtuse paaride jaoks sobib paremini DataStore. Struktureeritud andmete jaoks — Room. Suurte nestruktureeritud andmete jaoks — failisüsteem.