Sobes.tech
Junior

Jakie typy przechowywania danych istnieją w aplikacjach Android?

sobes.tech AI

Odpowiedź od AI

  1. 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.
  2. 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.
  3. 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.
  4. Bazy danych SQLite:

    • Relacyjna baza danych.
    • Odpowiednia do przechowywania danych strukturalnych.
    • Umożliwia używanie zapytań SQL do manipulacji danymi.
  5. 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.
  6. 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)