Sobes.tech
Junior

Quali tipi di archiviazione dei dati esistono nelle applicazioni Android?

sobes.tech AI

Risposta dell'AI

  1. Memoria interna:

    • Accessibile solo dall'applicazione che ha creato il file.
    • I file vengono eliminati quando si disinstalla l'app.
    • Adatto per memorizzare dati riservati dell'app.
  2. Memoria esterna:

    • Disponibile per tutte le applicazioni (dopo aver richiesto i permessi).
    • I file rimangono anche dopo la disinstallazione dell'app.
    • Adatto per memorizzare dati condivisi, come foto o musica.
  3. Preferenze condivise:

    • Memorizza piccoli volumi di dati in formato chiave-valore.
    • Usato per salvare impostazioni dell'app o preferenze utente.
    • I dati sono memorizzati in un file XML.
  4. Database SQLite:

    • Database relazionale.
    • Adatto per memorizzare dati strutturati.
    • Permette di usare query SQL per manipolare i dati.
  5. Content Providers:

    • Offrono un'interfaccia standardizzata per l'accesso ai dati tra le app.
    • Usati per scambiare dati, come contatti o calendario.
    • Possono essere usati per accedere ai dati propri dell'app da altri componenti.
  6. Jetpack DataStore:

    • Sostituisce le Shared Preferences.
    • Fornisce un'API asincrona per memorizzare i dati.
    • Supporta la tipizzazione dei dati e la gestione degli errori.

Ecco un esempio di utilizzo delle Shared Preferences:

// Ottenere l'oggetto SharedPreferences
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
    // Salvare un valore
    putBoolean("is_first_run", false)
    apply() // Applicare le modifiche in modo asincrono
}

// Leggere il valore
val isFirstRun = sharedPref.getBoolean("is_first_run", true)

Ecco un esempio di utilizzo di SQLite:

// Creazione del database e della tabella
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) {
        // Logica di aggiornamento del database
    }
}

// Inserimento dati
val dbHelper = DBHelper(this)
val db = dbHelper.writableDatabase

val values = ContentValues().apply {
    put(DBHelper.COLUMN_NAME, "Esempio di nome")
}

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