1.持久化技术:
数据持久化:将内存中的数据保存到文件,以使得设备在关机或者重启以后也能正常使用的一种技术;
内存态与持久态之间切换的代价:CPU,文件读取,文件写入,内核态的切换
2.Android内置的持久化技术:
(1)文件系统;
(2)SharedPreferences
(3)SQLite
3.文件系统如何使用:文件持久化
如何把数据保存到文件中:
如何把数据从文件中读取出来:
注意:数据默认放在data/data/packagename/files文件夹下,放在其他的路径下会被系统警告
文件写入和读取的例子:
(1)布局文件:
(2)写入和读取文件的java程序:
2.1定义变量以及获取布局ID:
public void write(){
String data="圣诞快乐,祝大家考试顺利!";
FileOutputStream out=null;
BufferedWriter writer=null;
try{
out=openFileOutput("data.log", Context.MODE_PRIVATE);
writer=new BufferedWriter(new OutputStreamWriter(out));
writer.write(data);
}catch (IOException e){
e.printStackTrace();
}finally {
try{
if (writer!=null){
writer.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
}
2.2按钮绑定写入文件函数事件:
WriteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { write(); } });
(3)定义写入文件的权限:
(4)读取文件的Java程序:
public String Read(){ //返回一个String FileInputStream in=null; //读文件的数据流 BufferedReader reader=null; StringBuilder content=new StringBuilder(); try{ in=openFileInput("data.log"); reader=new BufferedReader(new InputStreamReader(in)); String line=""; while ((line=reader.readLine())!=null){ content.append(line); } }catch (IOException e){ e.printStackTrace(); }finally { if(reader!=null){ try{ reader.close(); }catch (IOException e){ e.printStackTrace(); } } } return content.toString(); }
3.1按钮绑定读取文件系统数据:
ReadButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { String str=Read(); Toast.makeText(MainActivity.this,str,Toast.LENGTH_LONG).show(); } }); }
4.SharedPreferences如何使用:
(1)非关系性数据
(2)以Key-Value键值对的形式存储;
(3)本质上是维护了一个XML文件,在这个文件上进行数据存储与读取;
例子:直接看Java程序代码就好,其他的都一样
public void write(){ //没有返回值的 SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit(); //第一个参数:存储的文件名字,第二个参数是打开的模式 editor.putString("username","chunyu"); editor.putString("password","0321"); editor.apply(); }
按钮绑定写入SharedPreferences的事件:
WriteButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { write(); } });
写入的结果:
5.SQLite如何使用:
(1)一种关系型的数据库
(2)Android,windows和Linux上都可以直接使用
(3)免费开源
(4)在数据量较小的情况下,是一个很好的选择
例子:
布局文件:
使用SQLite存储数据的JAVA程序:
private Button createButton; private DataBaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //数据库的类实例化,实例化数据库访问 dbHelper=new DataBaseHelper(this,"userdatabase,db",null,1); //第二个参数是数据库的名 createButton=(Button)findViewById(R.id.creatButton); createButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { dbHelper.getWritableDatabase(); // } }); } public class DataBaseHelper extends SQLiteOpenHelper{ public static final String Create_SQL="create table userinfo(id integer primary key autoincrement,username text,password text)"; private Context mContext; public DataBaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){ super(context,name,factory,version); mContext=context; } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { //直接重写父类的方法 sqLiteDatabase.execSQL(Create_SQL); Toast.makeText(mContext,"创建数据库成功",Toast.LENGTH_LONG).show(); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { } }
运行结果: