十七、Android_数据存储

Android_数据存储

SharedPrefrence存储

特点:

专门存储单一的小数据;
存储数据的类型: boolean, float, int, long, String
以key-value的形式存储;
可以设置数据只能是当前应用读取, 而别的应用不可以
应用卸载时会自动删除数据;

位置:

/data/data/packagename/shared_prefs/xxx.xml

相关API:

SharedPreferences:对应sp文件的接口
context.getSharedreferences(String name,int mode):得到sp对象
Editor sp.edit():得到Editor对象
Xxx sp.getXxx(name,defaultValue):根据那么得到对应的数据

Editor:能更新sp文件的接口
Editor put(name,value);保存一个键值对,没有真正保存到文件中去
Editor remove(name);
commit():提交数据,真正保存到文件中

接口/类一般关注点:
1)此类用来做什么?
2)怎么获取类的对象?不是new而是通过别的对象得到
3)能用对象做什么事?有哪些常用的方法?

手机内部文件存储

特点:

较大的数据/图片
文件类型: 任意
可以设置数据只能是当前应用读取, 而别的应用不可以
在应用卸载时会自动删除此数据

位置:

/data/data/packagename/files/文件

相关API:

第一种方式,输入输出流
FileInputSteam fis = openFileInput(“logo.png”); // 读取文件
FileOutputStream fos = openFileOutput(“logo.png”,MODE_PRIVATE);// 保存文件
第二种方式,得到Files对象
File filesDir = getFilesDir(); // 得到files文件夹对象
再操作asserts下的文件
得到AssetManager:context.getAssets();
读取文件:InputStream open(filename);
加载图片文件
Bitmap BItmapFactory.decodeFile(String pathName) // .bmp/.png/.jpg

手机外部文件存储

特点:

应用运行时会用到的数据可以保存在外部文件
文件类型:任意
路径1:自动生成的&&应用卸载时会自动删除,其他应用可以访问
路径2:可自行创建&&应用卸载时不会自动删除,其他应用可以访问
必须保证sd卡挂载在手机上才能读写, 否则不能操作

位置:

路径1:/storage/sdcard/Android/data/packageName/files/ 自动生成的&应用卸载时会自动删除
路径2:/storage/sdcard/xxx/

相关API:

Environment:操作SD卡的工具类
Environment.getExternalStorageState() 得到SD卡的状态
Environment.getExternalStorageDirectory() 得到SD卡的路径
Environment.MEDIA_MOUNTED SD卡可读写的挂在状态值
context.getExternalFilesDir() 得到/mnt/sdcard/Android/data/packageName/files/xxx.txt
android.permission.WRITE_EXTERNAL_STORAGE 操作SD卡的权限

比较内部文件存储和外部文件存储————
1)存储空间的大小
2)是否是私有的
3)应用卸载是否自动删除

Sqlite数据库存储

特点:

有一定关系结构的数据
默认情况下其它应用不能访问, 当前应用可以通过ContentProvider提供其它应用操作
在应用卸载时自动删除数据

路径:

/data/data/packageName/databases/xxx.db

Sqlite数据库

sqlite的特点

小 && 快
(SQLite (http://www.sqlite.org/),是一款轻型的关系型数据库服务器, 移动设备的数据库存储都使用SQLite, 它的特点:
安装文件小: 最小只有几百K, Android系统已经安装
支持多操作系统: Android, WP, IOS, Windows, Linux等
支持多语言: 比如 Java 、 PHP、C#等.
处理速度快: 处理速度比Mysql, Oracle, SqlServer都要快(数据量不是特别大)
Sqlite中的一个数据库就是一个.db文件(本质上.db的后缀都可以不指定))

Sqlite数据库命令行

adb shell 进入系统根目录
cd data/data/…/databases : 进入包含数据库文件的文件夹下
sqlite3 contacts2.db : 使用sqlite3命令连接指定的数据库文件, 进入连接模式
.help : 查看命令列表
.tables : 查看所有表的列表
执行insert/delete/update/select语句
.exit : 退出数据库连接模式
Ctrl + C : 直接退出sell模式

Sqlite数据库支持的数据类型

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

Sqlite建表

Sqlite操作数据库的sql语句基本与mysql一样, 但需要注意下面2个点:
最大的不同在于创建表时可以不用指定字段类型, Sqlite可以适时的自动转换, 但除varchar类型外最好指定类型。Sqlite中的主键最名称建议使用_id
在这里插入图片描述

Sqlite常用语句

/插入/
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() : 得到数据库连接

SqliteDatabase代表与数据库连接的类
long insert(): 用于执行insert SQL, 返回id值
int update(): 用于执行update SQL
int delete(): 用于执行delete SQL
Cursor query(): 用于执行select SQL, 返回包含查询结果数据的Cursor
void execSql(sql) : 执行sql语句
beginTransaction(): 开启事务
setTransactionSuccessful(): 设置事务是成功的
endTransaction(): 结束事务, 可能提交事务或回滚事务
openDatabase(String path, CursorFactory factory, int flags): 得到数据库连接

Cursor包含所有查询结构记录的结果集对象
int getCount() : 匹配的总记录数
boolean moveToNext() : 将游标移动到下一条记录的前面(前面有数据则返回true)
Xxx getXxx(columnIndex) : 根据字段下标得到对应值
int getColumnIndex(columnname): 根据字段名得到对应的下标

Http协议

一次HTTP请求的过程:
建立连接 -> 发送请求 -> 处理请求 -> 返回数据 -> 发送请求2 -> ………关闭连接
HTTP请求的常用方式:
GET(请求参数在地址栏可见,放置于地址的后面,用?连接,无请求体。参数包括参数名和参数值(name=value),参数之间通过&隔开)
POST(请求参数在请求体中,在地址栏不可见)
HTTP请求的格式:请求行 请求头 请求体
HTTP响应的格式:响应行 响应头

远程服务存储

对于联网的APP来说, 可能需要通过请求向服务器提交请求数据, 也可能需要从服务器端获取数据显示,如何编码实现客户端与服务器端的交互呢?
JDK内置的原生API:HttpUrlConnection
Android内置的包装API:HttpClient 浏览器
异步网络请求框架: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: 代表请求的接口
StringRequest : 获取字符串结果的请求
JsonRequest : 获取Json数据结果的请求
ImageRequest : 获取图片结果的请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值