《第一行代码》第三版笔记六

目录

第七章

7.1、持久化技术

7.2、文件存储

7.2.1、将数据存储到文件中

7.2.2、从文件中读取数据

7.3、SharedPreferences存储

7.3.1、将数据存储到sharedPreferences

7.3.2、从sharedPreferences中读取数据

7.4、SQLite数据库存储

7.5、使用高阶函数简化SharedPrefreces的用法


第七章

7.1、持久化技术

        3种实现数据持久化功能:文件存储、SharedPreferences存储以及数据库存储

7.2、文件存储
7.2.1、将数据存储到文件中

        使用Context类提供的openFileOutput()方法,openFileOutput()方法接收两个参数:第一个参数是文件名;第二个参数是文件的操作模式,主要有有MODE_PRIVATEMODE_APPEND两种模式可选。默认为MODE_PRIVATE,表示当前指定相同文件名的时候,所写入的内容将会覆盖原文件的内容。

// 数据存储到文件中
fun save(inputText: String) {
     try {
         val output = openFileOutput("data", Context.MODE_PRIVATE)
         val writer = BufferedWriter(OutputStreamWriter(output))

       // 使用use扩展函数在lambda表达式中的代码全部执行完之后自动将外层的流关闭
         writer.use {
             it.write(inputText)
         }
    } catch (e: IOException) {
         e.printStackTrace()
     }
}
7.2.2、从文件中读取数据

         使用Context类提供的openFileOutput()方法,openFileOutput()方法只接受一个参数,即要读取的文件名。

// 从文件中读取数据
fun load(): String {
     val content = StringBuilder()
     try {
         val input = openFileInput("data")
         val reader = BufferedReader(InputStreamReader(input))
         reader.use {
            // forEachLine为内置函数,将读到的每行内容都回调到lambda表达式中
             reader.forEachLine {
                 content.append(it)
             }
         }
     } catch (e: IOException) {
         e.printStackTrace()
     }
}
7.3、SharedPreferences存储

        sharedPreferences使用键值对的方式存储数据。

7.3.1、将数据存储到sharedPreferences

        将数据存储到sharedPreferences需要先获取sharedPreferences对象,主要有两种方法获取sharedPreferences对象:

       1、Context类中的getSharedPreferences()方法

        Contetx中的getSharedPreferences()方法接收两个参数,第一个参数用于指定SharedPreferences文件的名称,如果指定的文件不存在则会创建一个,SharedPreferences文件的存放路径为:/data/data/<package name>/shared_prefs/目录下;第二个参数用于指定操作模式,目前只有默认的MODE_PRIVATE这一模式可选。

        2、 Activity类中的getPreferences()方法 

        Activity类中的getPreferences()方法接收一个参数。

        得到sharedPreferences对象后分3步实现先sharedPreferences文件中存储数据:

        (1)调用sharedPreferences对象的edit()方法获取一个sharedPreferences.Editor()对象;

        (2)向sharedPreferences.Editor()中添加数据

        (3)调用apply()方法将添加的数据提交

// 将数据存储到SharedPreferences中
fun saveToSharedPreferences(context: Context, key: String, value: Any) {
    val sharedPreferences = context.getSharedPreferences("my_preferences", Context.MODE_PRIVATE)
    val editor = sharedPreferences.edit()

    when (value) {
        is String -> editor.putString(key, value)
        is Int -> editor.putInt(key, value)
        is Boolean -> editor.putBoolean(key, value)
        is Float -> editor.putFloat(key, value)
        is Long -> editor.putLong(key, value)
    }

    editor.apply()
}
7.3.2、从sharedPreferences中读取数据

        根据put的类型使用相对应的get方法(例:布尔类型为getBoolean();String为getString()),每个get方法都接收两个参数:第一个参数是键,第二个参数是默认值,表示当传入的键找不到对应的值时会以什么样的默认值进行返回。

//从sharedPreferences中读取数据

fun getFromSharedPreferences(context: Context, key: String, defaultValue: Any): Any {

    // 通过getSharedPreferences得到sharedPreferences对象
    val sharedPreferences = context.getSharedPreferences("my_preferences", Context.MODE_PRIVATE)

    // 分别调用对应的get()方法
    return when (defaultValue) {
        is String -> sharedPreferences.getString(key, defaultValue) ?: ""
        is Int -> sharedPreferences.getInt(key, defaultValue)
        is Boolean -> sharedPreferences.getBoolean(key, defaultValue)
        is Float -> sharedPreferences.getFloat(key, defaultValue)
        is Long -> sharedPreferences.getLong(key, defaultValue)
        else -> throw IllegalArgumentException("Unsupported data type")
    }
}
7.4、SQLite数据库存储

        SQLiteOpenHelper为抽象类,SQLiteOpenHelper中有两个抽象方法:onCreate()和 onUpgrade()。两个实例方法:getReadableDatabase()和 getWritableDatabase()。两个构造方法可重写。

        1、创建数据库

create table Book (
    //使用primary key将id设置为主键,autoincrement表示id列是自增长
     id integer primary key autoincrement,
     author text,
     price real,
     pages integer,
     name text)

        2、onUpgrade()方法用于进行数据库升级

        3、insert()方法用于添加数据

        4、update()方法用于更新数据

        5、delete()方法用于删除数据

        6、query()用于查询数据

        使用SQL操作数据库

        (1)添加数据:

db.execSQL("insert into Book (name, author, pages, price) values(?, ?, ?, ?)",
     arrayOf("The Lost Symbol", "Dan Brown", "510", "19.95")
)

        (2)更新数据

db.execSQL("update Book set price = ? where name = ?", arrayOf("10.99", "The Da Vinci Code"))

        (3)删除数据

db.execSQL("delete from Book where pages > ?", arrayOf("500"))

        (4)查询数据

val cursor = db.rawQuery("select * from Book", null)
7.5、使用高阶函数简化SharedPrefreces的用法

        使用SharedPreferences存储数据(简化前):

val editor = getSharedPreferences("data", Context.MODE_PRIVATE).edit()
editor.putString("name", "Tom")
editor.putInt("age", 28)
editor.putBoolean("married", false)
editor.apply()

        简化后:


fun SharedPreferences.open(block: SharedPreferences.Editor.() -> Unit) {
     val editor = edit()
     editor.block()
     editor.apply()
}

// 调用
getSharedPreferences("data", Context.MODE_PRIVATE).open {
     putString("name", "Tom")
     putInt("age", 28)
     putBoolean("married", false)
}

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 面向对象编程的特点: - 封装:将数据和方法组合成一个类,并对外提供接口,隐藏内部实现细节,保证数据安全性和代码的可维护性。 - 继承:通过子类继承父类的属性和方法,实现代码的复用和扩展。 - 多态:同一种行为在不同情境下的不同表现形式,可以通过重载、重写和接口实现。 2. 类和对象: - 类是一种抽象的概念,是描述对象具有的属性和方法的模板。 - 对象是类的一个实例,具有这个类所描述的属性和方法。 3. 成员变量和成员方法: - 成员变量是描述对象状态的数据,可以是基本类型、对象类型或数组类型。 - 成员方法是描述对象行为的操作,可以是构造方法、普通方法、静态方法和抽象方法。 4. 构造方法和析构方法: - 构造方法是创建对象时调用的特殊方法,用于初始化对象的成员变量。 - 析构方法是销毁对象时调用的特殊方法,用于释放对象占用的资源。Java中不需要显式地调用析构方法,由垃圾回收器自动回收。 5. 访问控制: - 访问控制可以限制类的成员变量和成员方法的访问范围,保证数据的安全性和代码的可维护性。 - Java中有四种访问控制修饰符:public、protected、default、private。 6. 静态变量和静态方法: - 静态变量属于类,不属于对象,被所有对象共享。 - 静态方法可以通过类名调用,不需要创建对象。 7. final关键字: - final可以修饰类、成员变量和成员方法。 - final修饰的类不能被继承,修饰的变量是常量,修饰的方法不能被重写。 8. 抽象类和接口: - 抽象类是一种不能被实例化的类,只能作为父类被继承,可以包含抽象方法和普通方法。 - 接口是一种完全抽象的类型,只包含抽象方法和常量,用于定义规范和约束。类可以实现多个接口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值