安卓应用开发基础_数据存储

目录 前端技术

1. Android数据存储方式

Android支持的数据存储方式:

  • SharedPrefrence存储
  • 手机内部文件存储
  • 手机外部文件存储
  • Sqlite数据库存储
  • 远程服务器存储

2. 数据存储开发

2.1 SharedPreferences存储

  • SP存储专门用来存储一些单一的小数据
  • 存储数据的类型: boolean, float, int, long, String
  • 数据保存的路径: /data/data/packageName/shared_prefs/yyy.xml
  • 可以设置数据只能是当前应用读取, 而别的应用不可以
  • 应用卸载时会删除此数据相关API
  • SharedPreferences: 对应sp文件的接口
  • context. getSharedPreferences (String name, int mode): 得到SP对象
  • name: 文件名(不带.xml)
  • mode: 生成的文件模式(是否是私有的,即其它应用是否可以访问)
  • Editor sp.edit() : 得到Editor对象
  • Xxx sp.getXxx(name,defaultValue): 根据name得到对应的数据
  • Editor : 能更新sp文件的接口
  • Editor put(name, value) : 保存一个键值对, 没有真正保存到文件中
  • Editor remove(name)
  • commit(): 提交, 数据真正保存到文件中了

2.2 手机内部file存储

  • 应用运行需要的一些较大的数据或图片可以用文件保存的手机内部
  • 文件类型: 任意
  • 数据保存的路径: /data/data/projectPackage/files/
  • 可以设置数据只能是当前应用读取, 而别的应用不可以
  • 应用卸载时会删除此数据

相关API

读取文件

FileInputStream fis = openFileInput(“logo.png”);

保存文件

FileOutputStream fos = openFileOutput(“logo.png”, MODE_PRIVATE)

得到files文件夹对象

File filesDir = getFilesDir();

操作asserts下的文件

得到AssetManager : context.getAssets();

读取文件: InputStream open(filename);

加载图片文件

Bitmap BitmapFactory.decodeFile(String pathName) // .bmp/.png/.jpg

2.3 手机外部file存储

  • 应用运行用到的数据文件(如图片)可以保存到sd卡中
  • 文件类型: 任意
  • 数据保存的路径:
  • 路径1: /storage/sdcard/Android/data/packageName/files/
  • 路径2: /storage/sdcard/xxx/
  • 路径1 :其它应用可以访问,应用卸载时删除
  • 路径2 : 其它应用可以访问, 应用卸载时不会删除
  • 必须保证sd卡挂载在手机上才能读写, 否则不能操作

相关API:

Environment : 操作SD卡的工具类

得到SD卡的状态:Environment.getExternalStorageState()

得到SD卡的路径:Environment.getExternalStorageDirectory()

SD卡可读写的挂载状态值:Environment.MEDIA_MOUNTED

context. getExternalFilesDir():

得到/mnt/sdcard/Android/data/pageckage_name/files/xxx.txt

操作SD卡的权限:

android.permission.WRITE_EXTERNAL_STORAGE

2.4 Sqlite数据库存储

  • 应用运行需要保存一系列有一定结构的数据, 比如说公司员工信息
  • 文件类型: .db
  • 数据保存的路径: /data/data/projectPackage/databases/xxx.db
  • 默认情况下其它应用不能访问, 当前应用可以通过ContentProvider提供其它应用操作
  • 应用卸载时会删除此数据

Sqlite数据库

SQLite (http://www.sqlite.org/),是一款轻型的关系型数据库服务器, 移动设备的数据库存储都使用 SQLite, 它的特点:

安装文件小: 最小只有几百K, Android系统已经安装

支持多操作系统: Android, WP, IOS, Windows, Linux等

支持多语言: 比如 Java 、 PHP、C#等.

处理速度快: 处理速度比Mysql, Oracle, SqlServer都要快(数据量不是特别大)

Sqlite中的一个数据库就是一个.db文件(本质上.db的后缀都可以不指定)

Sqlite数据库客户端

安卓应用开发基础_数据存储

Sqlite数据库命令行

adb shell 进入系统根目录

cd data/data/…/databases : 进入包含数据库文件的文件夹下

sqlite3 contacts2.db : 使用sqlite3命令连接指定的数据库文件, 进入连接模式

.help : 查看命令列表

.tables : 查看所有表的列表

执行insert/delete/update/select语句

.exit : 退出数据库连接模式

Ctrl + C : 直接退出sell模式

数据类型:

  • Sqlite支持的数据类型与Mysql相似, 常用的数据类型
  • INT/INTEGER : 整数
  • FLOAT/DOUBLE : 小数
  • CHAR/VARCHAR/TEXT : 字符串文本
  • BLOB : 文件
  • DATE/ DATETIME : 日期/日期时间

Sqlite建表

Sqlite操作数据库的sql语句基本与mysql一样, 但需要注意下面2个点:

最大的不同在于创建表时可以不用指定字段类型, Sqlite可以适时的自动转换, 但除varchar类型外最好指定类型

Sqlite中的主键名称建议使用_id

create table employee (

_id integer primary key autoincrement, /*主键,自增长*/

name varchar, /*字符串*/

salary double, /*小数*/

birthday date /*日期, 可直接插入日期格式字符串*/

)

Sqlite的CRUD语句:

  • /*插入*/INSERT INTO employee (name,salary,birthday) VALUES(‘Tom’, 8000, ‘1988-09-21’);
  • /*删除*/DELETE FROM employee WHERE _id=2
  • /*更新*/UPDATE employee SET name=’Jack’,salary=salary+1000 WHERE _id=1
  • /*查找*/SELECT * FROM employee where _id=3

相关API:

  • SQLiteOpenHelper: 数据库操作的抽象帮助类
  • SQLiteOpenHelper(Context context, String name,
  • CursorFactory factory, int version) : 构造方法, 指定数据库文件名和版本号
  • abstract void onCreate(SQLiteDatabase db) : 用于创建表
  • abstract void onUpgrade() : 用于版本更新
  • SqliteDatabase getReadableDatabase() : 得到数据库连接
  • Cursor : 包含所有查询结果记录的结果集对象(光标,游标)
  • int getCount() : 匹配的总记录数
  • boolean moveToNext() : 将游标移动到下一条记录的前面
  • Xxx getXxx(columnIndex) : 根据字段下标得到对应值
  • int getColumnIndex(columnname): 根据字段名得到对应的下标

2.5 远程服务器存储

对于联网的APP来说, 可能需要通过请求向服务器提交请求数据, 也可能需要从服务器端获取数据显示

如何编码实现客户端与服务器端的交互呢?

  • ADK内置的原生APIHttpUrlConnection
  • Android内置的包装APIHttpClient 浏览器
  • 异步网络请求框架Volley

    Xutils

注意:

  • 访问网络, 需要声明权限: android.permission.INTERNET
  • 访问网络的程序必须在分线程执行

使用HttpConnection:

  • URL : 包含请求地址的类
  • URL(path) : 包含请求路径的构造方法
  • openConnection() : 得到连接对象
  • HttpURLConnection : 代表与服务器连接的类
  • setMethod(“GET/POST”) : 设置请求方式
  • setConnectTimeout(time) : 设置连接超时时间, 单位为ms
  • setReadTimeout(time): 设置读取服务器返回数据的时间
  • connect() : 连接服务器
  • int getResponseCode(): 得到服务器返回的结果码
  • Int getContentLength() : 得到服务器返回数据的长度(字节)
  • getOutputStream() : 返回一个指向服务器端的数据输出流
  • getInputStream() : 返回一个从服务器端返回的数据输入流
  • disconnect() : 断开连接

使用HttpClient:

  • HttpClient/DefaultHttpClient : 能提交请求的客户端对象HttpResponse execute (HttpUriRequest request)

    执行包含请求数据的请求对象, 返回包含响应数据的响应对象

  • HttpParams getParams()得到包含请求参数的对象
  • : HttpConnectionParams : 设置请求参数的工具类static setConnectionTimeout(params, time) : 设置获取连接的超时时间

    static setSoTimeout(params, time): 设置读取数据的超时时间

  • HttpGet : Get请求HttpGet(String path) : 包含请求路径的构造方法
  • HttpPost : Post请求HttpPost(String path) : 包含请求路径的构造方法

    setEntity(HttpEntity entity) : 设置请求体

  • NameValuePair/BasicNameValuePair : 包含参数键值对BasicNameValuePair (String name, String value)
  • HttpResponse : 服务器返回的响应getStatusLine() : 得到响应状态行, 从而得到状态码

    getEntity() : 得到响应体数据对象

  • EntityUtils : 解析HttpEntity的工具类toString(httpEntity): 解析响应体, 得其内容字符串
  • 关闭连接, 释放资源:client.getConnectionManager().shutdown();

Volley

  • Volley是Google 2013年的 I/O大会 上,发布了的一个框架
  • Volley是Android上的网络通信库,能使网络通信更快,更简单,更健壮
  • Volley特别适合数据量不大但是通信频繁的场景: 带图片的列表

Volley相关API

  • RequestQueue : 请求队列, 会自动执行队列中的请求
  • Volley. newRequestQueue(context) : 创建一个请求队列
  • addReqeust(Request reqeust) : 将请求添加到请求队列
  • Request<T>: 代表请求的接口
  • StringRequest : 获取字符串结果的请求
  • JsonRequest : 获取Json数据结果的请求
  • ImageRequest : 获取图片结果的请求

——————–分割线—————-

下次介绍安卓开发之消息机制与异步任务

本号持续更新讲解安卓开发,若是喜欢请订阅、收藏。

共同学习,一起进步