Sobes.tech
Junior

Какви типове съхранение на данни съществуват в Android приложенията?

sobes.tech AI

Отговор от AI

  1. Вътрешно съхранение (Internal Storage):

    • Достъпно само за приложението, което е създало файла.
    • Файловете се изтриват при деинсталиране на приложението.
    • Подходящо за съхранение на конфиденциални данни на приложението.
  2. Външно съхранение (External Storage):

    • Достъпно за всички приложения (след заявка за разрешения).
    • Файловете остават дори след деинсталиране на приложението.
    • Подходящо за съхранение на общи данни като снимки или музика.
  3. Общи предпочитания:

    • Съхранява малки количества данни във формат ключ-стойност.
    • Използва се за запазване на настройки на приложението или потребителски предпочитания.
    • Данните се съхраняват в XML файл.
  4. SQLite бази данни:

    • Релационна база данни.
    • Подходяща за съхранение на структурирани данни.
    • Позволява използването на SQL заявки за манипулиране на данните.
  5. Content Providers:

    • Предоставят стандартизиран интерфейс за достъп до данни между приложения.
    • Използват се за обмен на данни като контакти или календар.
    • Могат да бъдат използвани за достъп до собствени данни на приложението от други компоненти.
  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)