04_数据存储

来源:互联网 发布:php-ml 中文分词算法 编辑:程序博客网 时间:2024/05/28 04:54
1. Android中的数据存储方式:
    1). SharedPreferences存储
    2). 手机内部file存储
    3). 手机外部file存储
    4). Sqlite数据库存储
    5). 远程服务器存储
           

2. SharedPrefrence存储
     1). 存储的位置
          /data/data/packageName/share_prefs/xxx.xml
     2). 特点
          私有的以key--value的形式保存的小数据
          应用卸载时会自动删除
     3). 相关API
                a. SharedPreferences
context. getSharedPreferences (String name, int mode): 得到SP对象
name: 文件名(不带.xml)
mode: 生成的文件模式(是否是私有的,即其它应用是否可以访问)
Editor sp.edit() : 得到Editor对象
Xxx sp.getXxx(name,defaultValue): 根据name得到对应的数据
b. Editor
Editor put(name, value) : 保存一个键值对, 没有真正保存到文件中
Editor remove(name)
commit(): 提交, 数据真正保存到文件中了


3. 手机内部文件存储
     1). 存储的位置
             /data/data/packageName/files/xxx.xxx
     2). 特点
          私有的文件(图片, 数据库文件, 其它)
          应用卸载时会自动删除
     3). 相关API
         a. Context
                读取文件
     FileInputStream fis = openFileInput("logo.png");
保存文件
     FileOutputStream fos = openFileOutput("logo.png", MODE_PRIVATE)
得到files文件夹对象
     File filesDir = getFilesDir();
得到能操作assets下的文件的管理器
     AssetManager manager = getAssets();
         b. AssetManager 
                    得到文件输出流: InputStream open(String fileName)
         c. BitmapFactory
                    加载图片得到图片对象: Bitmap BitmapFactory.decodeFile(String pathName)

4. 手机外部文件存储
      1). 存储的位置
          a. /storage/sdcard/Android/data/packageName/files/
          b. /storage/sdcard/xxx/
     2). 特点
         a. 私有的文件(图片, 数据库文件, 其它), 应用卸载时会自动删除
         b. 其它应用可以直接访问, 应用卸载时不会删除
     3). 如何选择
         主要看应用卸载后, 文件是否还有存在的必要   
     4). 相关API
          Environment :  操作SD卡的工具类
得到SD卡的状态:Environment.getExternalStorageState() 
得到SD卡的路径:Environment.getExternalStorageDirectory()
SD卡可读写的挂载状态值:Environment.MEDIA_MOUNTED
 context. 
         getExternalFilesDir(): 得到/mnt/sdcard/Android/data/pageckage_name/files/
 操作SD卡的权限:
          android.permission.WRITE_EXTERNAL_STORAGE


5. Sqlite数据库存储
      1). 存储的位置
          /data/data/packageName/databases/xxx.db
     2). 特点
          有一定关系结构的数据
          应用卸载自动删除
     3). Sqlite的特点:
          a. 小: 几百K
          b. 快: 数据量不是特别大时
     4). 相关API:
         a. SQLiteOpenHelper: 数据库操作的抽象帮助类
      abstract void onCreate(SQLiteDatabase db): 用于创建表
      abstract void onUpgrade(): 用于版本更新
      SqliteDatabase getReadableDatabase() : 得到数据库连接
          b. SqliteDatabase: 代表与数据库的连接的类
       long insert(): 用于执行insert SQL, 返回id值
       int update(): 用于执行update SQL
       int delete(): 用于执行delete SQL
       Cursor query(): 用于执行select SQL, 返回包含查询结果数据的Cursor
       Cursor rawQuery(String sql, String[] selectionArgs)
       beginTransaction(): 开启事务
       setTransactionSuccessful(): 设置事务是成功的
       endTransaction(): 结束事务, 可能提交事务或回滚事务
       static openDatabase(String path, CursorFactory factory, int flags):  得到数据库连接
          c. Cursor : 包含所有查询结果记录的结果集对象(光标,游标)
     int getCount() : 匹配的总记录数
     boolean moveToNext() : 将游标移动到下一条记录的前面
     Xxx getXxx(columnIndex) : 根据字段下标得到对应值
     int getColumnIndex(columnname): 根据字段名得到对应的下标

     5). Android单元测试:
          1. 添加配置信息
<application>
    <!– 使用android测试包 --> 
    <uses-library android:name="android.test.runner" />  
</application>
<!-- android:targetPackage的值应与manifest的package的值一致-->
<instrumentation android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="com.atguigu.t4_storage” />
   2. 编写测试类
        class StudentTest extends AndroidTestCase

     6). 应用总结:
          1. 如何在列表(ListView)显示以后更新列表: adapter.notifyDatasetChanged();
          2. 使用系统定义布局: android.R.layout.xxx 
          3. 使用ListActivity:
               1). MyActivity extends ListActivity
               2). 在布局文件的<ListView id="@android:id/list"> 
               3). 如果在没有数据时想显示提示视图: <TextView id="@android:id/empty">
          4. 响应式操作的一般工作(3个):
               1).更新内存数据(集合)
               2).更新数据存储区的数据(数据库, SP等)
               3). 更新界面
                         

6. 远程网络服务器存储
      1). 对于联网的APP来说, 可能需要通过请求向服务器提交请求数据, 也可能需要从服务器端获取数据显示
      2). 联网请求功能的3步:
          a. 在主线程, 显示提示视图(ProgressBar/ProgressDialog)
          b. 在分线程, 请求服务器(url), 得到返回的数据
          c. 在主线程, 更新界面
               1. 移除/隐藏视图
               2. 显示数据
       3). 如何编码实现客户端与服务器端的交互
          a. JDK内置的原生API
               URL
               HttpUrlConnection
          b. Android内置的包装API
               HttpClient    浏览器  
               HttpGet/HttpPost 请求
               HttpResonse 响应
               HttpEntity  请求体/响应体
          c. 异步网络请求框架
               Volley
                    RequestQueue  : 请求队列
                         addRequest(request) :  将一个请求对象添加到队列, 会自动在分线程执行请求
                    Request
                         StringRequest:  返回的数据为String
                              StringRequest(String url, Listener, ErrorListener)
                         JsonRequest : 返回的数据为JSON
                         ImageRequest : 返回的数据为图片对象(Bitmap)
               Xutils(后面讲)


8. 应用练习

     
-----------------------------------------------------------
1. 功能描述:
     修改手机防盗的名称
2. 关键技术点:
     1. SharedPreferences的使用
     2. AlertDialog的使用
     3. GridView+BaseAdapter的使用
     4. item的长按监听

         
------------------------------------------------------------
1. 功能描述:
     黑名单的管理(添加,删除,修改和列表显示)
2. 关键技术点:
     1. Sqlite数据库的操作
     2. ListView列表显示
     3. AlertDialog的使用
     4. contextMenu的使用

    
      
------------------------------------------------------------
1. 功能描述:
     下载服务器端最新的APK, 显示下载进度, 下载完成自动安装
2. 关键技术点:
     1. SD卡读写
     2. 带下载进度的水平ProgressDialog的使用
     3. 分线程请求网络
     4. 安装APK


debug调试:
1. 添加断点
2. debug运行
3. debug的常用操作:
     3.1. 单步跳过(Step over): 执行完当前行, 进入下一行
     3.2. 跳入(Step into): 进入方法执行
     3.3. 跳出(step return): 跳出当前执行的方法
     3.3. 断点跳过(Resume): 执行完当前断点区域, 进入下一个断点(如果没有执行完)
4. 查看Variables中的变量变化
5. 右键变量名-->watcher查看变量的内容









0 0
原创粉丝点击