Junior
Jakie typy przechowywania danych istnieją w aplikacjach Android?
sobes.tech AI
Odpowiedź od AI
-
Pamięć wewnętrzna:
- Dostępna tylko dla aplikacji, która utworzyła plik.
- Pliki są usuwane po odinstalowaniu aplikacji.
- Odpowiednia do przechowywania poufnych danych aplikacji.
-
Pamięć zewnętrzna:
- Dostępna dla wszystkich aplikacji (po uzyskaniu uprawnień).
- Pliki pozostają nawet po odinstalowaniu aplikacji.
- Odpowiednia do przechowywania danych współdzielonych, takich jak zdjęcia czy muzyka.
-
Preferencje współdzielone:
- Przechowuje niewielkie ilości danych w formacie klucz-wartość.
- Używana do zapisywania ustawień aplikacji lub preferencji użytkownika.
- Dane są przechowywane w pliku XML.
-
Bazy danych SQLite:
- Relacyjna baza danych.
- Odpowiednia do przechowywania danych strukturalnych.
- Umożliwia używanie zapytań SQL do manipulacji danymi.
-
Dostawcy treści:
- Zapewniają standaryzowany interfejs do dostępu do danych między aplikacjami.
- Używane do wymiany danych, takich jak kontakty czy kalendarz.
- Mogą być używane do dostępu do własnych danych aplikacji z innych komponentów.
-
Jetpack DataStore:
- Zastępuje Preferencje Współdzielone.
- Zapewnia asynchroniczne API do przechowywania danych.
- Obsługuje typowanie danych i obsługę błędów.
Oto przykład użycia Preferencji Współdzielonych:
// Uzyskanie obiektu SharedPreferences
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
// Zapisujemy wartość
putBoolean("is_first_run", false)
apply() // Zastosuj zmiany asynchronicznie
}
// Odczytujemy wartość
val isFirstRun = sharedPref.getBoolean("is_first_run", true)
Oto przykład użycia SQLite:
// Tworzenie bazy danych i tabeli
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 nazwy")
}
val newRowId = db.insert(DBHelper.TABLE_NAME, null, values)