安卓笔记:数据存储和IO

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_20539533/article/details/102759857

安卓系统内置了SQLite数据库。

SQLite数据库:一个轻量级数据库,没有后台进程,整个数据库就对应一个文件,移植方便。

1.SharedPreferences

SharedPreferences保存的数据主要是类似于配置信息格式的数据。保存的数据主要是简单类型的key-value对。

SharedPreferences接口主要负责读取应用程序的Preferences数据,提供如下方法。

  • boolean contains(String key):判断SharedPreferences是否包含特定key的数据
  • Map<String,?>getAll():获取SharedPreferences数据里全部的key-value对
  • getXxx(String key,xxx defValue):获取SharedPreferences数据里指定key对应的value。如果key不存在,返回默认值defValue。xxx可以是boolean\float\int\long\String等

SharedPreferences接口并没有提供写入数据的能力,通过SharedPreferences.Editor才允许写入,SharedPreferences条用edit()方法获取它所对应的Editor对象。

  • SharedPreferences.Editor.clean():清空SharedPreferences里所有数据
  • SharedPreferences.Editor.putXxx(String key,xxx value):向SharedPreferences存入指定key对应的数据
  • SharedPreferences.Editor.remove(String key):删除SharedPreferences指定key对应的数据项
  • boolean apply():当Editor编辑完成后,调用该方法提交修改。commit也是提交修改(立即提交)。apply()是后台提交修改,不会阻塞前台线程,推荐apply()方法。

创建SharedPreferences实例

通过Context提供的getSharedPreferences(String name, int mode)方法获取SharedPreferences实例(无法直接创建SharedPreferences实例)第二个参数设定Context.MODE_PRIVATE。指定SharedPreferences数据只能被本应用程序读写。其他两个不推荐,不写。

2.File存储

Java提供了一套完整的IO流体系,有FileInputStream\FileOutputStream等,通过这些IO六可以方便地访问磁盘上的文件内容,安卓支持这些。

Context提供了两个方法来打开应用程序的数据文件夹里的文件IO流

  • FileInputStream openFileInput(String name):打开应用程序的数据文件夹下的name文件对应的输入流。
  • FileOutputStream openFileOutput(String name, int mode):打开应用程序的数据文件夹下的name文件对应的输出流。

mode有

  • MODE_PRIVATE:该文件只能被当前程序读写。
  • MODE_APPEND:以追加方式打开该文件,应用程序可以向该文件中追加内容。
  • MODE_WORLD_READABLE:该文件的内容可以被其他程序读取。
  • MODE_WORLD_WRITEABLE:该文件的内容可由其他程序读写。

其他方法

  • getDir(String name,int mode):在应用程序的数据文件夹下获取或创建name对应的子目录
  • File getFilesDir():获取应用程序的数据文件夹的绝对路径
  • String[] fileList():返回应用程序的数据文件夹下的全部文件
  • deleteFile(String):删除应用程序的数据文件夹下的指定文件

读取SD卡上的文件(1.有SD卡2.在应用程序的清单文件(AndroidManifest.xml)中添加读写SD卡的权限)

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

1.请求动态获取读写SD卡的权限

例:

requestPermissions(new int[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},0x123)

2.调用Environment的getExternalStorageDirectory()方法来获取外部存储器(获取SD卡目录)

3.使用FileInputStream\FileOutputStream\FileReader或FileWriter读写SD卡的文件

3.SQLite数据库

SQLiteDatabase

  • static SQLiteDatabase openDatabase(String path,SQLiteDatabase.CursorFactor factory, int flages):打开path文件所代表的SQLite数据库。
  • static SQLiteDatabase openOrCreateDatabase(File file,SQliteDatabase.Cursor Factory factory):打开或创建(如果不存在)file文件所代表的SQLite数据库。
  • static SQLiteDatabase openOrCreateDatabase(String path,SQLiteDatabase.Cursor Factory factory):打开或创建(如果不存在)path文件所代表的SQLite数据库。

在程序中获取了SQLiteDatabase对象后,可以通过以下方法操作数据库

  • execSQL(String sql,Object[] bindArgs):执行带占位符的SQL语句
  • execSQL(String sql):执行SQL语句
  • insert(String table, String nullColumnHack, ContentValues values):向指定表中插入数据
  • update(String table, ContentValues values, String whereClause, String[] whereArgs):更新指定表中的特定数据
  • delete(String table, String whereClause, String[] whereAtgs):删除指定表中的特定数据
  • Cursor query(String sql,String[] columns,String whereClause,String[] whereArgs,String groupBy, String having, String orderBy):对指定数据表执行查询
  • Cursor query(String sql,String[] columns,String whereClause,String[] whereArgs,String groupBy, String having, String orderBy,String limit):对指定数据表执行查询.其中第一个参数控制是否去除重复值
  • rawQuery(String sql,String[] selectionArgs):执行带占位符的SQL查询。
  • beginTransaction():开始事务

Cursor提供了如下方法来移动查询结果的记录指针

  • move(int offset):将记录指针向上或向下移动指定的行数(正数向下,负数向上)
  • boolean moveToFirst():将记录指针移动到第一行,如果移动成功返回true
  • boolean moveToLast():将记录指针移动到最后一行,如果移动成功返回true
  • boolean moveToNext():将记录指针移动到下一行,如果移动成功返回true
  • boolean moveToPosition(int position):将记录指针移动到指定行,如果移动成功返回true
  • boolean moveToPrevious():将记录指针移动到上一行,如果移动成功返回true

SQLiteOpenHelper类

通常继承SQLiteOpenHelper开发子类,并通过该子类的getReadableDatabase()\getWritableDatabase()方法开打数据库

4.手势(Gesture)

安卓为手势检测提供了一个GestureDetector类,GestureDetector实例代表了一个手势检测器,创建GestureDetector时需要传入一个GestureDetectorListener实例,GestureDetector.OnGestureListener就是一个监听器,负责对用户的手势行为提供响应。

使用

1.创建一个GestureDetector对象(必须实现GestureDetector.OnGestureListener监听器接口)

2.为应用程序的Activity(特定组件)的TouchEvent事件绑定监听器,在事件处理中指定把Activity(特定组件)上的TouchEvent事件交给GestureDetector处理。

猜你喜欢

转载自blog.csdn.net/qq_20539533/article/details/102759857