Junior
Jaké typy úložišť dat existují v Android aplikacích?
sobes.tech AI
Odpověď od AI
-
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.
-
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.
-
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.
-
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.
-
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.
-
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)