从文件中读取数据.
private fun load(): String{
val content=StringBuffer()
try {
val input=openFileInput("data")
val reader=BufferedReader(InputStreamReader(input))
reader.use {
reader.forEachLine {
content.append(it)
}
}
}catch (e: IOException){
e.printStackTrace()
}
return content.toString()
}
在Oncreate中添加相关的文件读取代码
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val inputText=load()
if(inputText.isNotEmpty()){
editText.setText(inputText)
editText.setSelection(inputText.length)//将光标设置到文本末尾
Toast.makeText(this,"Restoring succeeded",Toast.LENGTH_SHORT).show()
}
}
SharedPreferences存储
将数据存储到SharedPreferences中.
saveButton.setOnClickListener {
val editor=getSharedPreferences("data", Context.MODE_PRIVATE).edit()
editor.putString("name","Tom")
editor.putInt("age",28)
editor.putBoolean("married",false)
editor.apply()//提交
}
从SharedPreferences中读取数据
restoreButton.setOnClickListener {
val prefs=getSharedPreferences("data",Context.MODE_PRIVATE)
val name=prefs.getString("name","")
val age=prefs.getInt("age",0)
val married=prefs.getBoolean("married",false)
Log.d("MainActivity","name is $name")
Log.d("MainActivity","age is $age")
Log.d("MainActivity","married is $married")
}
运行截图
实现记住密码功能
由于之前BroadcastBestPractice中有相关的登录界面因此直接在这个项目中进行修改.
添加checkBox
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/rememberPass"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="Remember password"/>
</LinearLayout>
判断是否记住了密码
登陆前
val prefs=getPreferences(Context.MODE_PRIVATE)//默认文件名为类名
val isRemember=prefs.getBoolean("remember_password",false)//如果存在remember_password 那么就是true
if(isRemember){
val account=prefs.getString("account","")
val password=prefs.getString("password","")
accountEdit.setText(account)
passwordEdit.setText(password)
rememberPass.isChecked=true
}
登录时,如果选择了记住密码,那么此时应该要存储到Preferences文件当中.
if(account=="admin"&&password=="123456"){
val editor=prefs.edit()
if(rememberPass.isChecked){
editor.putBoolean("remember_password",true)
editor.putString("account",account)
editor.putString("password",password)
}else{
editor.clear()
}
editor.apply()
SQLite数据库存储
android为方便管理数据库,专门提供了一个SQLiteOpenHelper帮助类.
SQLiteOpenHelper是一个抽象类,需要创建一个子类去继承它,并且重写其中的两个抽象方法: onCreate()和onUpgrade(),SQLiteOpenHelper中还有两个重要的实例方法(必须创建实例对象才能调用,及一般方法) getReadableDatabase() 和getWritableDatabase()这两个方法.
SQLiteOpenHelper的构造方法要 提供4个参数. Context,数据库名称,自定义Cursor,当前数据库的版本号(用于对数据库进行升级操作).
创建子类继承SQLiteOpenHelper
package com.example.databasetest
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import android.widget.Toast
class MyDatabaseHelper(val context: Context,name: String,version: Int) : SQLiteOpenHelper(context,name,null,version) {
private val createBook="create table Book("+" id integer primary key autoincrement,"+"author text,"+"price real,"+"pages integer,"+"name text)"
override fun onCreate(db: SQLiteDatabase) {
db.execSQL(createBook)
Toast.makeText(context,"Create succeeded",Toast.LENGTH_SHORT).show()
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
}
}//MyDatabaseHelper 继承抽象类SQLiteOpenHelper,并且重写其中的两个抽象方法
接着添加一个按钮作为触发器(创建一个MyDatabseHelper对象,并且调用getWritableDatabase()方法判断数据库是否存在,如果不存在会接着调用onCreate方法)
val dbHelper=MyDatabaseHelper(this,"BookStore.db",1)
createDatabase.setOnClickListener {
dbHelper.writableDatabase
}