Sobes.tech
Junior

Jaké typy úložišť dat existují v Android aplikacích?

sobes.tech AI

Odpověď od AI

  1. Vnitřní úložiště (Internal Storage):

    • Přístupné pouze pro aplikaci, která soubor vytvořila.
    • Soubory jsou mazány při odinstalaci aplikace.
    • Vhodné pro ukládání důvěrných dat aplikace.
  2. Vnější úložiště (External Storage):

    • Přístupné všem aplikacím (po žádosti o oprávnění).
    • Soubory zůstávají i po odinstalaci aplikace.
    • Vhodné pro ukládání sdílených dat, jako jsou fotografie nebo hudba.
  3. Sdílené preference:

    • Ukládá malá množství dat ve formátu klíč-hodnota.
    • Používá se pro ukládání nastavení aplikace nebo uživatelských preferencí.
    • Data jsou uložena v XML souboru.
  4. SQLite databáze:

    • Relační databáze.
    • Vhodné pro ukládání strukturovaných dat.
    • Umožňuje používat SQL dotazy pro manipulaci s daty.
  5. Poskytovatelé obsahu (Content Providers):

    • Poskytují standardizované rozhraní pro přístup k datům mezi aplikacemi.
    • Používají se pro výměnu dat, jako jsou kontakty nebo kalendář.
    • Mohou být použity pro přístup k vlastním datům aplikace z jiných komponent.
  6. Jetpack DataStore:

    • Nahrazuje sdílené preference.
    • Poskytuje asynchronní streamové API pro ukládání dat.
    • Podporuje typizaci dat a zpracování chyb.

Zde je příklad použití sdílených preferencí:

// Získání objektu SharedPreferences
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
    // Uložení hodnoty
    putBoolean("is_first_run", false)
    apply() // Asynchronní aplikace změn
}

// Čtení hodnoty
val isFirstRun = sharedPref.getBoolean("is_first_run", true)

Zde je příklad použití SQLite:

// Vytvoření databáze a tabulky
class DBHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) {

    companion object {
        const val DATABASE_VERSION = 1
        const val DATABASE_NAME = "MyDatabase.db"
        const val TABLE_NAME = "my_table"
        const val COLUMN_ID = "_id"
        const val COLUMN_NAME = "name"
    }

    override fun onCreate(db: SQLiteDatabase) {
        val createTable = "CREATE TABLE $TABLE_NAME (" +
                "$COLUMN_ID INTEGER PRIMARY KEY," +
                "$COLUMN_NAME TEXT)"
        db.execSQL(createTable)
    }

    override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
        // Logika aktualizacji bazy danych
    }
}

// Wstawianie danych
val dbHelper = DBHelper(this)
val db = dbHelper.writableDatabase

val values = ContentValues().apply {
    put(DBHelper.COLUMN_NAME, "Przykład imienia")
}

val newRowId = db.insert(DBHelper.TABLE_NAME, null, values)