kotlin写安卓的sharepreference存储功能
来源:互联网 发布:php mvc 开发实战 编辑:程序博客网 时间:2024/06/15 16:17
安卓项目里面,基本会使用的功能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) }
就是简单取值显示:
今天就到这里吧,有不懂的同学可以留言。
阅读全文
1 0
- kotlin写安卓的sharepreference存储功能
- Android 的 SharePreference 存储方式
- SharePreference(存储)
- 数据存储之sharePreference
- 数据存储之sharePreference
- 数据存储之SharePreference
- 数据存储之SharePreference
- android--存储之SharePreference
- 数据存储之sharePreference
- 数据存储之sharePreference
- android--存储之SharePreference
- android数据存储SharePreference
- SharePreference存储数据
- 用SharePreference存储数据
- sharepreference存储心得
- SharePreference存储数据
- Sharepreference存储对象,图片
- sharepreference存储数据
- 超轻量/跨平台UI框架(目前已经支持: Windows, Android, Linux, VR)
- Android的五种数据存储方式
- C++写二进制数据到文件中
- WKWebView的使用
- 实际项目中的秒杀系统应用(简述)
- kotlin写安卓的sharepreference存储功能
- nyoj 170 网络的可靠性
- JAVA初学者的一些建议
- RxJava笔记2
- Bribe the Prisoners(GCJ 2009 Round 1C C)(dp)
- C#,两个接口相同名称函数调用时的区分
- Mysql数据库防SQL注入原理
- emmit快捷键
- 22 视图