Sobes.tech
Junior

Ποιοι τύποι αποθήκευσης δεδομένων υπάρχουν στις εφαρμογές Android;

sobes.tech AI

Απάντηση από AI

  1. Εσωτερική αποθήκευση:

    • Διαθέσιμη μόνο για την εφαρμογή που δημιούργησε το αρχείο.
    • Τα αρχεία διαγράφονται κατά την απεγκατάσταση της εφαρμογής.
    • Κατάλληλο για την αποθήκευση εμπιστευτικών δεδομένων της εφαρμογής.
  2. Εξωτερική αποθήκευση:

    • Διαθέσιμη σε όλες τις εφαρμογές (μετά την αίτηση άδειας).
    • Τα αρχεία παραμένουν ακόμα και μετά την απεγκατάσταση της εφαρμογής.
    • Κατάλληλο για την αποθήκευση κοινών δεδομένων, όπως φωτογραφίες ή μουσική.
  3. Κοινές προτιμήσεις:

    • Αποθηκεύει μικρού όγκου δεδομένα σε μορφή κλειδιού-τιμής.
    • Χρησιμοποιείται για την αποθήκευση ρυθμίσεων εφαρμογής ή προτιμήσεων χρήστη.
    • Τα δεδομένα αποθηκεύονται σε αρχείο XML.
  4. Βάσεις δεδομένων SQLite:

    • Σχεσιακή βάση δεδομένων.
    • Κατάλληλο για την αποθήκευση δομημένων δεδομένων.
    • Επιτρέπει τη χρήση ερωτημάτων SQL για την επεξεργασία δεδομένων.
  5. Πάροχοι περιεχομένου:

    • Παρέχουν τυποποιημένη διεπαφή για την πρόσβαση σε δεδομένα μεταξύ εφαρμογών.
    • Χρησιμοποιούνται για ανταλλαγή δεδομένων, όπως επαφές ή ημερολόγιο.
    • Μπορούν να χρησιμοποιηθούν για πρόσβαση σε δικά τους δεδομένα εφαρμογής από άλλα συστατικά.
  6. Jetpack DataStore:

    • Αντικαθιστά τις Κοινές Προτιμήσεις.
    • Παρέχει ασύγχρονο API για την αποθήκευση δεδομένων.
    • Υποστηρίζει τυποποίηση δεδομένων και διαχείριση σφαλμάτων.

Ακολουθεί ένα παράδειγμα χρήσης των Κοινών Προτιμήσεων:

// Λήψη αντικειμένου SharedPreferences
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return
with (sharedPref.edit()) {
    // Αποθήκευση τιμής
    putBoolean("is_first_run", false)
    apply() // Εφαρμογή των αλλαγών ασύγχρονα
}

// Ανάγνωση τιμής
val isFirstRun = sharedPref.getBoolean("is_first_run", true)

Ακολουθεί ένα παράδειγμα χρήσης SQLite:

// Δημιουργία βάσης δεδομένων και πίνακα
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) {
        // Λογική ενημέρωσης της βάσης δεδομένων
    }
}

// Εισαγωγή δεδομένων
val dbHelper = DBHelper(this)
val db = dbHelper.writableDatabase

val values = ContentValues().apply {
    put(DBHelper.COLUMN_NAME, "Παράδειγμα ονόματος")
}

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