Получение значения с помощью общего предпочтения в Kotlin - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь передать значение между двумя действиями в kotlin, но если я использовал приведенный ниже код, я получаю только значение по умолчанию "Hello World", а не значение PREFERENCE_NAME.Мой текстовый идентификатор: android: id = "@ + id / tv_count" Любая помощь приветствуется.

Main Activity:
import android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val mypreference=MyPreference(this)
        var loginCount=mypreference.getLoginName()
        mypreference.setLoginName(loginCount)
        tv_count.text=loginCount.toString()
    }
}

My Preference:
import android.content.Context

class MyPreference(context:Context)
{

    val PREFERENCE_NAME="SharedPreferenceExample"
    val preference=context.getSharedPreferences(PREFERENCE_NAME,Context.MODE_PRIVATE)

    fun getLoginName():String
    {
        return preference.getString(PREFERENCE_NAME,"Hello World")
    }

    fun setLoginName(name:String)
    {
        val editor=preference.edit()
        editor.putString(PREFERENCE_NAME,name)
    }
}

Ответы [ 4 ]

0 голосов
/ 27 июня 2019

Это будет более широкий ответ, показывающий общий способ использования предпочтений очень элегантно, благодаря делегированным свойствам в Kotlin.Это позволяет нам предоставлять собственное резервное хранилище для повседневных свойств.

Рассмотрим этот класс, который описывает, как читать и писать логическое значение:

class BooleanPrefStore(val default: Boolean = false) {
  operator fun getValue(thisRef: ContextWrapper?, property: KProperty<*>): Boolean =
    PreferenceManager.getDefaultSharedPreferences(thisRef)
      .getBoolean(property.name, default)

  operator fun setValue(thisRef: ContextWrapper?, property: KProperty<*>, value: Boolean) {
    PreferenceManager.getDefaultSharedPreferences(thisRef)
      .edit()
      .putBoolean(property.name, value)
      .apply()
  }
}

Метод получения и установки, использующий обычныеспособ читать и писать из предпочтений.И с помощью этого класса мы можем настроить наши свойства очень кратко и элегантно:

var Property1: Boolean by BooleanPrefStore()
var Property2: Boolean by BooleanPrefStore(true)

Он даже позволяет нам предоставлять значение по умолчанию, если оно отличается от «значения по умолчанию по умолчанию».Просто создайте другие классы помощников таким же образом, IntPrefStore, LongPrefStore или StringPrefStore, если они вам нужны.Затем вы просто используете эти свойства или присваиваете им значения, и все они автоматически сохраняются и извлекаются из хранилища настроек.

Только одно предупреждение: хранилищу предпочтений необходим доступ к текущему контексту.Если вы объявите эти свойства в Activity, Fragment или аналогичном классе Android, который сохраняет контекст, вам больше нечего делать.Все эти классы реализуют ContextWrapper.Но если вам нужны свойства в вашем собственном классе, вам нужно сделать его ContextWrapper самостоятельно, например:

class MyClass private constructor(context: Context) : ContextWrapper(context) {
  ...

Просто предоставьте контекст, когда вы создадите его.

0 голосов
/ 22 октября 2018

class MyPreference (context: Context) {

val PREFERENCE_NAME="SharedPreferenceExample"
val preference=context.getSharedPreferences(PREFERENCE_NAME,Context.MODE_PRIVATE)

fun getLoginName():String
{
    return "$PREFERENCE_NAME"
}

fun setLoginName(name:String)
{
    val editor=preference.edit()
    editor.putString(PREFERENCE_NAME,name)
    editor.commit()
}

}

0 голосов
/ 27 декабря 2018

В вашем случае вы не использовали функцию editor.commit ().Вот весь код

//Store in SharedPreference  
 val preference=getSharedPreferences(resources.getString(R.string.app_name), Context.MODE_PRIVATE)
    val editor=preference.edit()
    editor.putBoolean("isLoggedIn",true)
    editor.putInt("id",1)
    editor.putString("name","Alex")
    editor.commit()


//Retrieve from SharedPreference

    val name= preference.getString("name","")
    val id= preference.getInt("id",0)
    val isLoggedIn= preference.getBoolean("isLoggedIn",false)
0 голосов
/ 21 октября 2018

Вам нужно позвонить commit т.е.

fun setLoginName(name:String)
{
    val editor=preference.edit()
    editor.putString(PREFERENCE_NAME,name)
    editor.commit()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...