Android核心技术之(4)---数据存储

1.Android支持的数据存储方式:

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

2.SharedPrefrencd存储

2.1特点

•SP存储专门用来存储一些单一的小数据
•存储数据的类型:  boolean,float, int,long, String
•数据保存的路径:  /data/data/packageName/shared_prefs/yyy.xml
•可以设置数据只能是当前应用读取, 而别的应用不可以
•应用卸载时会删除此数据

2.2相关API

•SharedPreferences:对应sp文件的接口
–context. getSharedPreferences (String name, intmode): 得到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.1特点

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

2.2相关API

•读取文件
•FileInputStreamfis= openFileInput("logo.png");
•保存文件
–FileOutputStreamfos= openFileOutput("logo.png",MODE_PRIVATE)
•得到files文件夹对象
•File filesDir= getFilesDir(); 
•操作asserts下的文件
•得到AssetManager: context.getAssets();
•读取文件: InputStreamopen(filename);
•加载图片文件
Bitmap BitmapFactory.decodeFile(StringpathName)   // .bmp/.png/.jpg

3.手机外部文件存储(SD卡文件存储)

3.1特点

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

3.2相关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

4.SQLite数据库存储

4.1特点

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

4.2SQLite数据库简介

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

安装文件 :最小只有几百K,Android系统已经安装
•支持多操作系统:Android, WP, IOS, Windows, Linux等
•支持多语言:比如Java、PHP、C#等.
处理速度快:  处理速度比Mysql,Oracle, SqlServer都要快(数据量不是特别大)
•Sqlite中的一个数据库就是一个 . db 文件(本质上.db的后缀都可以不指定)

4.3SQLite数据库命令行

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

4.4数据类型

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

4.5Sqlite建表

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

createtable employee (

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

       name varchar,                /*字符串*/

       salary double,                                /*小数*/

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

)


4.6Sqlite的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


4.7相关API

SQLiteOpenHelper : 数据库操作的抽象帮助类

   

      SQLiteOpenHelper(Contextcontext,String name,

      CursorFactoryfactory, intversion) : 构造方法,指定数据库文件名和版本号

      abstract void onCreate(SQLiteDatabasedb): 用于创建表

      abstract void onUpgrade(): 用于版本更新

      SqliteDatabasegetReadableDatabase(): 得到数据库连接


SqliteDatabase : 代表与数据库的连接的类

  

      longinsert(): 用于执行insertSQL, 返回id值

       intupdate(): 用于执行updateSQL

       intdelete(): 用于执行deleteSQL

       Cursor query(): 用于执行selectSQL, 返回包含查询结果数据的Cursor

       void execSql(sql): 执行sql语句

    

       beginTransaction():开启事务

       setTransactionSuccessful():设置事务是成功的

       endTransaction():结束事务,可能提交事务或回滚事务

       openDatabase(Stringpath, CursorFactory factory,intflags):  得到数据库连接


Cursor : 包含所有查询结果记录的结果集对象 ( 光标 , 游标 )

 

   intgetCount(): 匹配的总记录数

  booleanmoveToNext(): 将游标移动到下一条记录的前面

  Xxx getXxx(columnIndex): 根据字段下标得到对应值

  intgetColumnIndex(columnname):根据字段名得到对应的下标


4.8Andriod中的junit测试


1.添加配置信息

<application>

    <!-- 使用android测试包-->

    <uses-libraryandroid:name="android.test.runner"/> 

</application>

<!--android:targetPackage的值应与manifestpackage的值一致-->

<instrumentationandroid:name="android.test.InstrumentationTestRunner"

    android:targetPackage="com.atguigu.t4_storage”/>

2.编写测试类

        class StudentTestextendsAndroidTestCase


5.远程服务器存储


5.1特点


•对于联网的APP来说,可能需要通过请求向服务器提交请求数据, 也可能需要从服务器端获取数据显示
•如何编码实现客户端与服务器端的交互呢?
–JDK内置的原生API
   •HttpUrlConnection
–Android内置的包装API
   •HttpClient    浏览器 
–异步网络请求框架
   •Volley
   •Xutils
•注意: 
        访问网络, 需要声明权限: android.permission.INTERNET;
         访问网络的程序必须在分线程执行。

5.2使用 HttpUrlConnection


1.URL : 包含请求地址的类
   •URL(path): 包含请求路径的构造方法
   •openConnection() : 得到连接对象
2.HttpURLConnection : 代表与服务器连接的类
   •setMethod(“GET/POST”) : 设置请求方式
   •setConnectTimeout(time) : 设置连接超时时间, 单位为ms
   •setReadTimeout(time): 设置读取服务器返回数据的时间

   •connect():连接服务器

   •int getResponseCode(): 得到服务器返回的结果码
   •Int getContentLength() : 得到服务器返回数据的长度(字节)
   •getOutputStream() : 返回一个指向服务器端的数据输出流
   •getInputStream() : 返回一个从服务器端返回的数据输入流
   •disconnect(): 断开连接

5.3使用 HttpClient  

1.HttpClient/DefaultHttpClient : 能提交请求的客户端对象
•HttpResponseexecute (HttpUriRequestrequest):执行包含请求数据的请求对象,返回包含响应数据的响应对象
•HttpParamsgetParams():得到包含请求参数的对象
2.: HttpConnectionParams : 设置请求参数的工具类
•static setConnectionTimeout(params, time) : 设置获取连接的超时时间
•staticsetSoTimeout(params, time): 设置读取数据的超时时间
3.HttpGet : Get请求
•HttpGet(Stringpath) : 包含请求路径的构造方法
4.HttpPost : Post请求
•HttpPost(Stringpath) : 包含请求路径的构造方法
•setEntity(HttpEntityentity) : 设置请求体

1.NameValuePair/BasicNameValuePair : 包含参数键值对
•BasicNameValuePair(String name, String value)
2.HttpResponse : 服务器返回的响应
•getStatusLine(): 得到响应状态行, 从而得到状态码
•getEntity(): 得到响应体数据对象
3.EntityUtils : 解析HttpEntity的工具类
•toString(httpEntity):  解析响应体, 得其内容字符串

4. 关闭连接, 释放资源:

•client.getConnectionManager().shutdown();

5.4 Volley

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

5.4.2相关API

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



















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值