Android数据存储

文章目录

    • 共享参数SharedPreference
      • 1.共享参数用法
      • 2.实现记住密码功能
      • 3.利用设备浏览器寻找共享参数文件
    • 数据库SQLite
      • 1.SQL基本语法
      • 2.数据库管理器SQLitedatabase
      • 3.数据库帮助器SQLiteOpenHelper
      • 4.优化记住密码功能
    • 存储卡文件操作
      • 1.私有存储空间和公共存储空间
      • 2.在存储卡上读写文本文件
      • 3.在存储卡上读写图片文件
    • 应用组件Application
      • 1.Appication生命周期
      • 2.利用Application操作全局变量
      • 3.利用Room简化数据库操作

共享参数SharedPreference

  • SharedPreference是Android的一个轻量级存储工具,采用的存储结构是K-V的键值对式方式。
  • 共享参数的存储介质是符合XML规范的配置文件,保存路径是:/data/data/应用包名/shared_prefs/文件名.xml

1.共享参数用法

  • 简单且孤立的数据,若是复杂且相互间有关的数据,则要保存在数据库中
  • 文本形式的数据,若是二进制数据,则要保存在文件中
  • 需要持久化存储的数据,在App退出后再次启动时,之前保存的数据仍然有效

实际开发中,共享参数经常存储的数据有App的个性化配置信息、用户使用App的行为信息、临时需要保存的片段信息等。

2.实现记住密码功能

3.利用设备浏览器寻找共享参数文件

数据库SQLite

1.SQL基本语法

2.数据库管理器SQLitedatabase

SQLiteDatabase是SQLite的数据库管理类,它提供了若干操作数据库表的API,常用的方法有3类:
1.管理类,用于数据库层面。

  • openDatabase:打开指定路径的数据库
  • isOpen:判断数据库是否已打开
  • close:关闭数据库
  • getVersion:获取数据库的版本号
  • setVersion:设置数据库的版本号

2.事务类,用于事务层面的操作。

  • beginTransaction:开启事务
  • setTTransationSuccessful:设置事务的成功标志
  • endTransaction:结束事务

3.数据处理类,用于数据表层面的操作。

  • execSQL:执行拼接好SQL控制语句
  • delete:删除符合条件的记录
  • update:更新符合条件的记录
  • insert:插入一条记录
  • query:执行查询操作,返回结果集的游标
  • rawQuery:执行拼接好的SQL查询语句,返回结果集的游标

3.数据库帮助器SQLiteOpenHelper

SQLiteOpenHelper是Android提供的数据库辅助工具,用于指导开发者进行SQLite合理使用。
SQLiteOpenHelper具体的使用步骤如下:

  • 新建一个继承自SQLiteOpenHelper的数据库操作类,提示重写onCreate和onUpgrade两个方法
  • 封装保证数据库安全的必要方法
  • 提供对表记录进行增加、删除、修改、查询的操作方法

4.优化记住密码功能

存储卡文件操作

1.私有存储空间和公共存储空间

Android把外部存储分成了两块区域,一块是所有应用均可访问的公共空间,另一块是只有应用自己才可访问的私有空间。

2.在存储卡上读写文本文件

  • 外部存储私有空间
directory = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString();
  • 外部存储公共空间
directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
  • 内部存储私有空间
directory = getFilesDir().toString();

3.在存储卡上读写图片文件

Android的位图工具是Bitmap,App读写Bitmap可以使用性能更好的BufferedOutputStream和BufferedInputStream。
Android还提供了BitmapFactory工具用于读写各种来源的图片,相关方法如下:

  • decodeResource:该方法可从资源文件中读取图片信息
  • decodeFile:该方法可将指定路径的图片读取到Bitmap对象
  • decodeStream:该方法从输入流中读取位图数据

应用组件Application

1.Appication生命周期

Application是Android的一大组件,在App运行过程中有且仅有一个Application对象贯穿整个生命周期。

  • onCreate:App启动时
  • onTerminate:App终止时调用
  • onConfigurationChanged:配置改变时调用

2.利用Application操作全局变量

全局的意思是其他代码都可以引用该变量,因此全局变量是共享数据和消息传递的好帮手。
适合在Application中保存的全局变量主要有下面3类数据:

  • 会频繁读取的信息,如用户名、手机号等
  • 不方便由意图传递的数据,例如位图对象、非字符串类型的集合对象等
  • 容易频繁分配内存而导致内存泄漏的对象,如Handler对象等

3.利用Room简化数据库操作

使用数据库帮助器编码的时候,开发者每次都的手工实现以下代码逻辑:

  1. 重写数据库帮助器的onCreate方法,添加该表的建表语句
  2. 在插入记录之时,必须将数据实例的属性值逐一赋值给该表的各字段
  3. 在查询记录之时,必须遍历结果集游标,把各字段逐一赋给数据实例
  4. 每次读写操作之前,都要先开启数据库连接;读写操作之后,又要关闭数据库连接

Room是谷歌公司推出的数据库处理框架,该框架同样基于SQLite,但它通过注解技术极大简化了数据库操作,减少了原来相当一部分工作量。
在使用Room之前,要先修改模块的build.gradle文件,添加对应的依赖。

以录入书籍信息为例,使用Room框架的编码过程分为下列五步:

  1. 编写书籍信息表对应的实体类,该类添加@Entity注解
  2. 编写书籍信息表对应的持久化类,该类添加@Dao注解
  3. 编写书籍信息表对应的数据库类,该类从RoomDatabase派生而来,并添加@Database注解
  4. 在自定义的Application类中声明书籍数据库的唯一实例
  5. 在操作书籍信息表的地方获取数据库表的持久化对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/888089.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 :“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令命令解释SHOW DATABASES;展示所有的数据库CREATE DATABASE 数据库名称; 创…

基于STM32的数字温度传感器设计与实现

引言 STM32 是由意法半导体(STMicroelectronics)开发的基于 ARM Cortex-M 内核的微控制器系列,以其强大的处理能力、丰富的外设接口和低功耗著称,广泛应用于嵌入式系统设计中。在这篇文章中,我们将介绍如何基于 STM32…

深度学习:基于MindSpore实现ResNet50中药分拣

ResNet基本介绍 ResNet(Residual Network)是一种深度神经网络架构,由微软研究院的Kaiming He等人在2015年提出,并且在ILSVRC 2015竞赛中取得了很好的成绩。ResNet主要解决了随着网络深度增加而出现的退化问题,即当网络…

数据结构与算法——动态规划算法简析

1.初步了解动态规划 由于本篇博客属于动态规划的初阶学习,所以大多都是简单的表示,更深层次的学术用语会在之后深度学习动态规划之后出现,本文主要是带各位了解一下动态规划的大致框架 1.1状态表示 通常的我们会开辟一个dp数组来存储需要表示…

015 品牌关联分类

文章目录 后端CategoryBrandEntity.javaCategoryBrandController.javaCategoryBrandServiceImpl.javaCategoryServiceImpl.javaBrandServiceImpl.java删除 npm install pubsub-jsnpm install --save pubsub-js这个错误是由于在尝试安装 pubsub-js 时,npm 发现了项目…

数据结构(栈和队列的实现)

1. 栈(Stack) 1.1 栈的概念与结构 栈是一种特殊的线性表,其只允许固定的一段插入和删除操作;进行数据插入和删除的一段叫做栈顶,另一端叫栈底;栈中的元素符合后进先出LIFO(Last In First Out&…

C++——模拟实现vector

1.查看vector的源代码 2.模拟实现迭代器 #pragma oncenamespace jxy {//模板尽量不要分离编译template <class T>class vector{public:typedef T* iterator;//typedef会受到访问限定符的限制typedef const T* const_iterator;//const迭代器是指向的对象不能修改&#xf…

透明物体的投射和接收阴影

1、让透明度测试Shader投射阴影 &#xff08;1&#xff09;同样我们使用FallBack的形式投射阴影&#xff0c;但是需要注意的是&#xff0c;FallBack的内容为&#xff1a;Transparent / Cutout / VertexLit&#xff0c;该默认Shader中会把裁剪后的物体深度信息写入到 阴影映射纹…

毕业设计_基于springboot+ssm+bootstrap的旅游管理系统【源码+SQL+教程+可运行】【41001】.zip

毕业设计_基于springbootssmbootstrap的旅游管理系统【源码SQL教程可运行】【41001】.zip 下载地址&#xff1a; https://download.csdn.net/download/qq_24428851/89828190 管理系统 url: http://localhost:8080/managerLoginPageuser: admin password: 123 用户门户网站…

【设计模式-解释模式】

定义 解释器模式是一种行为设计模式&#xff0c;用于定义一种语言的文法&#xff0c;并提供一个解释器来处理该语言的句子。它通过为每个语法规则定义一个类&#xff0c;使得可以将复杂的表达式逐步解析和求值。这种模式适用于需要解析和执行语法规则的场景。 UML图 组成角色…

SPDK从安装到运行hello_world示例程序

SPDK从安装到运行示例程序 #mermaid-svg-dwdwvhrJiTcgTkVf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dwdwvhrJiTcgTkVf .error-icon{fill:#552222;}#mermaid-svg-dwdwvhrJiTcgTkVf .error-text{fill:#552222;s…

android compose ScrollableTabRow indicator 指示器设置宽度

.requiredWidth(30.dp) Box(modifier Modifier.background(Color.LightGray).fillMaxWidth()) {ScrollableTabRow(selectedTabIndex selectedTabIndex, // 默认选中第一个标签containerColor ColorPageBg,edgePadding 1.dp, // 内容与边缘的距离indicator { tabPositions…

【本地缓存】Java 中的 4 种本地缓存

目录 1、手写一个简单的本地缓存1.1、封装缓存实体类1.2、创建缓存工具类1.3、测试 2、Guava Cache2.1、Guava Cache 简介2.2、入门案例2.2.1、引入 POM 依赖2.2.2、创建 LoadingCache 缓存 2.3、Guava Cache 的优劣势和适用场景 3、Caffeine3.1、Caffeine 简介3.2、对比 Guava…

图的基本概念 - 离散数学系列(五)

目录 1. 图的定义 节点与边 2. 度与路径 节点的度 路径与圈 3. 图的连通性 连通图与非连通图 强连通与弱连通 连通分量 4. 实际应用场景 1. 社交网络 2. 城市交通系统 3. 网络结构 5. 例题与练习 例题1&#xff1a;节点的度 例题2&#xff1a;判断连通性 练习题…

linux基础 超级笔记

1.Linux系统的组成 Linux系统内核&#xff1a;提供系统最核心的功能&#xff0c;如软硬件和资源调度。 系统及应用程序&#xff1a;文件、任务管理器。 2.Linux发行版 通过修改内核代码自行集成系统程序&#xff0c;即封装。比如Ubuntu和centos这种。不过基础命令是完全相…

【瑞昱RTL8763E】刷屏

1 显示界面填充 用户创建的各个界面在 rtk_gui group 中。各界面中 icon[]表对界面进行描述&#xff0c;表中的每个元素代表一 个显示元素&#xff0c;可以是背景、小图标、字符等&#xff0c;UI_WidgetTypeDef 结构体含义如下&#xff1a; typedef struct _UI_WidgetTypeDef …

vite学习教程03、vite+vue2打包配置

文章目录 前言一、修改vite.config.js二、配置文件资源/路径提示三、测试打包参考文章资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝3W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容&…

【深度强化学习基础】(一)基本概念

【深度强化学习基础】&#xff08;一&#xff09;基本概念 一、概率论基础知识二、强化学习领域术语三、强化学习中两个随机性的来源&#xff1a;四、rewards以及returns五、Value Functions1.Action-Value Function Q π ( s , a ) Q_\pi(s,a) Qπ​(s,a)2.State-Value Funct…

【高等数学学习记录】函数的极限

一、知识点 &#xff08;一&#xff09;知识结构 #mermaid-svg-Dz0Ns0FflWSBWY50 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Dz0Ns0FflWSBWY50 .error-icon{fill:#552222;}#mermaid-svg-Dz0Ns0FflWSBWY50 .erro…

影刀---如何进行自动化操作

本文不是广告&#xff0c;没有人给我宣传费&#xff0c;只是单纯的觉得这个软件很好用 感谢大家的多多支持哦 本文 1.基本概念与操作&#xff08;非标准下拉框和上传下载&#xff09;非标准对话框的操作上传对话框、下载的对话框、提示的对话框 2.综合案例3.找不到元素怎么办&a…