Junior
Ποιοι τύποι αποθήκευσης δεδομένων υπάρχουν στις εφαρμογές Android;
sobes.tech AI
Απάντηση από AI
-
Εσωτερική αποθήκευση:
- Διαθέσιμη μόνο για την εφαρμογή που δημιούργησε το αρχείο.
- Τα αρχεία διαγράφονται κατά την απεγκατάσταση της εφαρμογής.
- Κατάλληλο για την αποθήκευση εμπιστευτικών δεδομένων της εφαρμογής.
-
Εξωτερική αποθήκευση:
- Διαθέσιμη σε όλες τις εφαρμογές (μετά την αίτηση άδειας).
- Τα αρχεία παραμένουν ακόμα και μετά την απεγκατάσταση της εφαρμογής.
- Κατάλληλο για την αποθήκευση κοινών δεδομένων, όπως φωτογραφίες ή μουσική.
-
Κοινές προτιμήσεις:
- Αποθηκεύει μικρού όγκου δεδομένα σε μορφή κλειδιού-τιμής.
- Χρησιμοποιείται για την αποθήκευση ρυθμίσεων εφαρμογής ή προτιμήσεων χρήστη.
- Τα δεδομένα αποθηκεύονται σε αρχείο XML.
-
Βάσεις δεδομένων SQLite:
- Σχεσιακή βάση δεδομένων.
- Κατάλληλο για την αποθήκευση δομημένων δεδομένων.
- Επιτρέπει τη χρήση ερωτημάτων SQL για την επεξεργασία δεδομένων.
-
Πάροχοι περιεχομένου:
- Παρέχουν τυποποιημένη διεπαφή για την πρόσβαση σε δεδομένα μεταξύ εφαρμογών.
- Χρησιμοποιούνται για ανταλλαγή δεδομένων, όπως επαφές ή ημερολόγιο.
- Μπορούν να χρησιμοποιηθούν για πρόσβαση σε δικά τους δεδομένα εφαρμογής από άλλα συστατικά.
-
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)