Android - 持久化
一、文件存储
Context类提供openFileOutput、openFileInput;参数:文件名(不可以包含路径)、文件操作模式(MODE_PRIVATE、MODE_APPEND)
文件默认存储到/data/data/<packagename>/files/目录下;借助DDMS的File Explorer可以查看具体内容;
private final String fileName="data";
private void save(String inputText){
FileOutputStream out=null;
BufferedWriter writer=null;
try{
out=openFileOutput(fileName, MODE_PRIVATE);
writer=new BufferedWriter(new OutputStreamWriter(out));
writer.write(inputText);
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(writer!=null)
writer.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
private String load(){
FileInputStream in=null;
BufferedReader reader=null;
StringBuilder content=new StringBuilder();
try{
in=openFileInput(fileName);
reader=new BufferedReader(new InputStreamReader(in));
String line=null;
while((line=reader.readLine())!=null){
content.append(line);
}
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(reader!=null)
reader.close();
}catch(IOException e){
e.printStackTrace();
}
}
return content.toString();
}
二、SharedPreferences 存储
SharedPreferences 是使用键值对的方式来存储数据,文件存储在 /data/data/<packagename>/shared_prefs/目录下,使用XML格式管理数据;
首先需要获取到 SharedPreferences 对象,调用 edit()方法获取一个 SharedPreferences.Editor 对象,向该对象添加数据(putString()),最后调用commit();
1)Context 类中的 getSharedPreferences() 方法;
2)Activity 类中的 getPreferences() 方法;总是将活动的类名作为 SharedPreferences 的文件名;
3)PreferenceManager 类中的 getDefaultSharedPreferences() 方法;自动使用应用程序的包名作为前缀命名文件;
SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name", "Tom");
editor.putInt("age", 15);
editor.commit();
三、SQLite 数据库存储
1、SQLiteOpenHelper 抽象类
抽象方法:onCreate() 、onUpgrade(),创建和升级数据库逻辑
实例方法:getReadableDataBase() 、getWritableDatabase() 创建或打开一个现有数据库,SQLiteDatabase ;
2、使用adb工具查看数据库:1) sdk的platform-tools 目录下执行命令 adb shell 就进入设备的控制台;
2) cd 到/data/data/<packagename>/databases/ 目录;
3) 可使用 ls 查看文件列表,使用sqlite3 databaseName 打开数据库;
4) 数据库操作命令有:.table .schema
3、Sqlite 数据类型:integer-整型、text-文本类型、real-浮点型、blob-二进制类型;
4、使用SQLiteDatabase进行CRUD操作;
ContentValues values=new ContentValues();
values.put("price", 10.99);
db.update("Book", values, "name=?", new String[]{"The Lost Symbol"});
//
Cursor cursor=db.query("Book",null,null,null,null,null,null);
if(cursor.moveToFirst()){
do{
String name=cursor.getString(cursor.getColumnIndex("name"));
String author=cursor.getString(cursor.getColumnIndex("author"));
int pages=cursor.getInt(cursor.getColumnIndex("pages"));
double price=cursor.getDouble(cursor.getColumnIndex("price"));
Log.d("MainActivity",name+"|"+author+"|"+pages+"|"+price);
}while(cursor.moveToNext());
}
cursor.close();
5、直接执行SQL操作数据库:db.execSql(strSql)、db.rawQuery(queryStr);SQL中的占位符使用「?」
6、使用事务:
db.beginTransaction(); //开启事务
try{
...
db.setTransactionSuccessful(); //事务执行成功
}catch(...){
}finally{
db.endTransaction(); //结束事务
}
浙公网安备 33010602011771号