安卓系统内置了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处理。