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

目录

第七章

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)
}

### 关于郭霖《第一行代码第三版第二章的学习笔记 在郭霖的《第一行代码第三版中,第二章主要围绕 Android 应用的基础概念展开,介绍了如何创建第一个 Android 项目以及理解项目的结构。以下是基于已有引用内容和专业知识整理的相关学习笔记: #### 创建 Android 项目 为了开发 Android 应用程序,开发者需要准备必要的工具并搭建开发环境。这些工具包括但不限于 JDK (1.8 或更高版本)[^1]、Android SDK 和集成开发环境 Android Studio[^1]。 一旦安装完成,可以通过 Android Studio 的向导界面来创建一个新的 Android 项目。在此过程中,开发者可以选择目标设备类型(如手机和平板)、设置最低支持的 API 版本(通常建议从 API 15 开始,即 Android 4.0),以及其他配置选项[^3]。 #### 理解 Android 项目结构 新创建的 Android 项目会自动生成一系列文件夹和文件,其中一些重要的部分包括: - **`app/src/main/java/`**: 存放 Java/Kotlin 源码的地方。 - **`res/` 文件夹**: 资源目录,用于存储布局 XML 文件、图片资源和其他静态数据。 - **`AndroidManifest.xml`**: 定义应用程序的核心元信息,比如活动组件 (`Activity`) 和权限声明。 #### 显式与隐式 Intent 的使用 Intent 是 Android 中一种非常重要的机制,用来描述一个操作的动作及其携带的数据。当通过 `Intent(context, TargetClass.class)` 这种方式指定要跳转的目标 Activity 时,则称为显式 Intent[^2];相对应地,如果仅指定了动作类别或者 MIME 类型而不具体指向某个 Component,则属于隐式 Intent。 #### 多线程处理简介 对于耗时较长的操作,应该避免阻塞主线程以免影响用户体验。为此可以利用多线程技术,在后台执行复杂计算或网络请求等工作负载。最简单的做法就是继承 Thread 类重载 run 方法,或者是实现 Runnable 接口并将其实例传递给新的 Thread 对象实例化之后调用 start 方法即可开启子线程运行相应任务[^4]。 ```java // 实现Runnable接口的方式启动线程 new Thread(new Runnable() { @Override public void run() { // 执行耗时操作 } }).start(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值