1.SharedPreferences存储(键值对,简单的数据)
路径:/data/data/包名/shared_prefs/filename
两种方法获取该类对象
Context.getSharedPreferences(抽象方法在ContextWrapper子类中实现)(可以指定文件名,模式)
PreferenceManager.getDefaultSharedPreferences(文件名默认为包名,模式默认MODE_PRIVATE)
(本质还是调用Context的getSharedPreferences方法)
SharedPreferences sharedPreferences=getSharedPreferences("testSP",MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.apply();
四种模式:
后两种模式因为其危险性在API17版本的时候已经过时弃用
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.
SharedPreferences.Editor.apply()异步写入数据,无返回值,效率高,可靠性低
SharedPreferences.Editor.commit同步写入数据,有返回值,效率低,可靠性高(返回值为boolean型,是否写入)
2.文件存储:输出到文件openFileOutput(name,type),从文件读取openFileInput(name)
路径:/data/data/包名/files/filename
就是用Context的这两个方法获得流对象,再用Java各种流进行操作
//输出
FileOutputStream outputStream=openFileOutput("fileTest",MODE_PRIVATE);
BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("Data Test");
bufferedWriter.close();
//读取
FileInputStream inputStream=openFileInput("fileTest");
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
char[] b=new char[50];
int len=bufferedReader.read(b);
System.out.println(new String(b,0,len));
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
3.SQLite轻量级数据库,用SQLiteOpenHelper类操作,或者开源框架Litepal操作
路径:/data/data/包名/databases/filename
使用Android提供的方法SQLiteOpenHelper操作
SQLiteOpenHelper sqLiteOpenHelper=new SQLiteOpenHelper(MainActivity.this,"testsqlite",null,1) {
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table Book (id integer primary key autoincrement,author text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
};
SQLiteDatabase sqLiteDatabase=sqLiteOpenHelper.getWritableDatabase();
1.继承SQLiteOpenHelper覆写onCreate()和onUpgrade()方法
onCreate在建库时调用,onUpgrade在更新时调用
(这里比较懒,直接用匿名内部类的方法构建)
2.获取SQLiteOpenHelper对象,构造方法四个参数,Context,数据库名,查询返回的自定义Cursor(一般填null),版本号
3.调用getReadableDatabase()和getWritableDatabase()
4.之后可以用SQLiteDatabase对象进行增删改查
getReadableDatabase()和getWritableDatabase()的作用和区别
- 调用会返回一个可以读写数据库的对象
- 在第一次调用时会调用onCreate的方法
- 当数据库存在时会调用onOpen方法
- 结束时调用onClose方法
两者都是读写模式,前者在磁盘满的时候会变成只读,后者在磁盘满的时候会报错
生成的.db文件查看用adb(Android Debug Bridge)工具查看
也可以用数据库可视化工具查看例如,SQLiteStudio https://sqlitestudio.pl/index.rvt
________________________________分割线________________________________
真机调试查看db文件(使用SQLiteStudio可视化工具)
https://blog.youkuaiyun.com/yh18668197127/article/details/86573335
SQLite还可以用开源框架Litepal进行操作,请看我的另一篇博客
https://blog.youkuaiyun.com/yh18668197127/article/details/85065540