kotlin写安卓的sharepreference存储功能

本文介绍了一个使用 Kotlin 实现 SharedPreferences 的示例,展示了如何在 Android 应用的不同界面间存储和读取数据。通过一个简单的应用实例,演示了从界面 A 设置值并在界面 B 显示该值的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓项目里面,基本会使用的功能shareperference 的存储功能,用来储存一些状态或者字符串等等,kotlin 在这方面提供了很好的实现:
见代码如下:
功能:今天就来实现以下,界面A 跳转到界面B ,在A里面设置一个值,在B里面取值显示:
先来看下工具类的代码:

/**
 * Created by ${李伟} on 2017/8/29 0029.
 */
class Preference<T>(val context: Context, val string:String, val default : T) : ReadWriteProperty<Any?, T> {

    override fun getValue(thisRef: Any?, property: KProperty<*>): T {
        return findPreference(string, default)
    }

    val prefs by lazy{context.getSharedPreferences("Realnen",Context.MODE_PRIVATE)}

    override fun setValue(thisRef: Any?, property: KProperty<*>, value: T) {
        putPreference(string, value)
    }

    private fun<A> putPreference(name:String,value:A)= with(prefs.edit()){
        when(value){//if语句 现在在kotlin中是表达式
            is Long -> putLong(name,value)
            is String -> putString(name,value)
            is Int -> putInt(name,value)
            is Boolean -> putBoolean(name,value)
            is Float -> putFloat(name,value)
            else ->   putString(name,serialize(value))
        }.apply()
    }
    private fun <U> findPreference(name: String, default: U): U = with(prefs) {
        val res: Any = when (default) {
            is Long -> getLong(name, default)
            is String -> getString(name, default)
            is Int -> getInt(name, default)
            is Boolean -> getBoolean(name, default)
            is Float -> getFloat(name, default)
            else -> throw IllegalArgumentException("This type can not be saved")
        }
        res as U
    }

    /**
     * 序列化对象

     * @param person
     * *
     * @return
     * *
     * @throws IOException
     */
    @Throws(IOException::class)
    private fun<A> serialize(obj: A): String {
        val byteArrayOutputStream = ByteArrayOutputStream()
        val objectOutputStream = ObjectOutputStream(
                byteArrayOutputStream)
        objectOutputStream.writeObject(obj)
          var serStr = byteArrayOutputStream.toString("ISO-8859-1")
        serStr = java.net.URLEncoder.encode(serStr, "UTF-8")
        objectOutputStream.close()
        byteArrayOutputStream.close():

       return serStr    }

}

是不是被震撼到了,哈哈,真心好
界面A代码:

class MainActivity : AppCompatActivity(){

    private var first: String by Preference(this, "first", "")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        main_text.text="你好,Kotlin"
        main_text.setTextColor(R.color.colorPrimaryDark)
    }

    /**
     * kotlin的界面相互的之间的跳转
     */
    fun intent(view: View){
        //获取intent对象
        val inetnt = Intent()
        intent.setClass(this,KotlinActivity::class.java)
        startActivity(intent)
    }

    override fun onStop() {
        super.onStop()
    }

    override fun onResume() {
        super.onResume()
    }

    fun btn_setname(view:View){
        first = "李伟"
    }



}

调用只需要一行,修改也是,是不是很省事
界面B:

class KotlinActivity : AppCompatActivity() {

    private var first: String by Preference(this, "first", "")

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_kotlin)
        main_text.setText(first)
    }

就是简单取值显示:
今天就到这里吧,有不懂的同学可以留言。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值