Хобрук: Ваш путь к мастерству в программировании

Как читать и писать SharedPreferences при использовании androidx.preference:preference-ktx:1.1.1 с Kotlin?

Обычно я использую код A или код B для чтения или записи SharedPreferences.

В настоящее время я обновляю свой проект, чтобы использовать "androidx.preference:preference-ktx:1.1.1" с Kotlin.

Есть ли лучший способ читать и писать SharedPreferences, когда я использую "androidx.preference:preference-ktx:1.1.1" с Kotlin?

Код А

SharedPreferences prfs = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE);
String Astatus = prfs.getString("Authentication_Status", "");

Код Б

SharedPreferences preferences = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Authentication_Id",userid.getText().toString());
editor.putString("Authentication_Password",password.getText().toString());
editor.putString("Authentication_Status","true");
editor.apply();
10.07.2020

  • просто преобразуйте приведенный выше код в kotlin. 10.07.2020

Ответы:


1

без написания собственного дополнительного кода, для вашего фрагмента кода B вы можете сделать это с помощью библиотеки ktx

val preferences = getSharedPreferences("AUTHENTICATION_FILE_NAME", MODE_PRIVATE)
preferences.edit {
   putString("Authentication_Id", userid.getText().toString())
   putString("Authentication_Password", password.getText().toString())
   putString("Authentication_Status", "true")
}
16.07.2020

2

В вашем файле Pref.class укажите Контекст конструктору.

    class Prefs constructor(
            private val context: Context
        ) {
    
       private fun getSharedPreferences(prefsName: String) =
            context.getSharedPreferences(prefsName, Context.MODE_PRIVATE)
    
        private val AUTH_PHONE = "auth_phone"
        private val KEY_AUTH_PHONE = "auth_phone"
        private val authPhone by lazy { getSharedPreferences(AUTH_PHONE) }
        
        var phoneNumber: String
            get() {
                return authPhone.getString(KEY_AUTH_PHONE, null) ?: return ""
            }
            set(value) {
                authPhone.edit()
                    .putString(KEY_AUTH_PHONE, value)
                    .apply()
            } 
}

Затем вы можете использовать его в своей деятельности.

  Pref(context).phoneNumber = "998998578086"
10.07.2020
  • Если хотите, я могу поделиться кодом Full Souce SharedPref. Свяжитесь со мной. 10.07.2020

  • 3

    Если вы хотите пойти дальше и повысить безопасность, вы можете использовать зашифрованные общие настройки параллельно, так как это только для Android M и выше. Это очень просто, если вы используете DI:

    interface SharedPrefs {
        var accessToken: String?
        fun get(): SharedPreferences
    }
    
    class SimplePreferences(context: Context) : SharedPrefs {
        private val preferences: SharedPreferences =
            context.getSharedPreferences("myapp_preferences", Context.MODE_PRIVATE)
    
        override fun get(): SharedPreferences = preferences
    
        override var accessToken: String?
            get() = preferences.getString(MyApp.ACCESS_TOKEN_PREF_KEY, null)
            set(value) = preferences.edit().putString(MyApp.ACCESS_TOKEN_PREF_KEY, value)
                .apply()
    }
    
    @TargetApi(Build.VERSION_CODES.M)
    class EncryptedSharedPrefs(val context: Context) : SharedPrefs {
    
        private var encryptedPrefs: SharedPreferences = EncryptedSharedPreferences.create(
            context,
            "myapp_encrypted_prefs",
            MasterKey.Builder(context).build(),
            EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
            EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
        )
    
        override fun get(): SharedPreferences = encryptedPrefs
    
        override var accessToken: String?
            get() = encryptedPrefs.getString(MyApp.ACCESS_TOKEN_PREF_KEY, null)
            set(value) = encryptedPrefs.edit().putString(
                MyApp.ACCESS_TOKEN_PREF_KEY,
                value
            ).apply()
    }
    

    коин модуль:

    single {
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
             EncryptedSharedPrefs(applicationContext)
       } else
             SimplePreferences(applicationContext)
       }
    }
    

    Использование:

    val sharedPrefs by inject<SharedPrefs>()
    
    // read 
    println(sharedPrefs.accessToken)
    
    // write
    sharedPrefs.accessToken = "qwerty"
    
    21.07.2020
    Новые материалы

    Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
    Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

    Фишинг — Упаковано и зашифровано
    Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

    ВЫ РЕГРЕСС ЭТО?
    Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

    Не зря же это называют интеллектом
    Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

    LeetCode Проблема 41. Первый пропущенный положительный результат
    LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..