Junior
Какви типове съхранение на данни съществуват в Android приложенията?
sobes.tech AI
Отговор от AI
-
Вътрешно съхранение (Internal Storage):
- Достъпно само за приложението, което е създало файла.
- Файловете се изтриват при деинсталиране на приложението.
- Подходящо за съхранение на конфиденциални данни на приложението.
-
Външно съхранение (External Storage):
- Достъпно за всички приложения (след заявка за разрешения).
- Файловете остават дори след деинсталиране на приложението.
- Подходящо за съхранение на общи данни като снимки или музика.
-
Общи предпочитания:
- Съхранява малки количества данни във формат ключ-стойност.
- Използва се за запазване на настройки на приложението или потребителски предпочитания.
- Данните се съхраняват в XML файл.
-
SQLite бази данни:
- Релационна база данни.
- Подходяща за съхранение на структурирани данни.
- Позволява използването на SQL заявки за манипулиране на данните.
-
Content Providers:
- Предоставят стандартизиран интерфейс за достъп до данни между приложения.
- Използват се за обмен на данни като контакти или календар.
- Могат да бъдат използвани за достъп до собствени данни на приложението от други компоненти.
-
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)