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(); //结束事务
}

  

  

  

posted @ 2016-01-08 23:12  chenyizh  阅读(135)  评论(0)    收藏  举报