android提供了三种数据存储方式
1.文件存储
首先,Context类中提供了一个openFileOutput()方法可以,将数据存储到指定的文件中,openFIleOutput接受两个参数,一个是文件名,另一个是操作模式
(1)MODE_PRIVATE 默认模式,会覆盖原文件
(2)MODE_APPEND 追加模式,不覆盖
protected void onDestory(){
super.onDestory();
String inputText = edit.getText().toString();
save(inputText);
}
public void save(String inputText){
FileOutputStream out = null;
BufferedWriter writer = null;
try{
out = openFileOutput("data",Context.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();
}
}
}
写在onDestory里是防止写完按了返回键就没有了,这样子可以保证一定会存进去,open FileOutput返回的是FileOutputStream对象
1.2读问文件
public String load(){
FileInputStream in = null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder();
try{
in = openFileInput("data");
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();
}
读取和写入大同小异,一个是openFileOutput 一个是openFileInput,然后后续操作类似,一些小技巧是,TextUtils.isEmpty()这个方法null和空字符串他都会返回true,以及setSelection()方法将edittext光标移动到末尾。
2.SharedPreferences
一般用来存入键值对
SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name","Tom");
editor.putInt("age",28);
editor.apply();
2.2读取数据
SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
String name = pref.getString("name","");
只需要使用get即可,第一个参数是键,第二个是找不到时的默认返回值
3.数据库
当你想要修改数据库,比如你要新增一张表,或者原来的表里面多加一列,那么就需要重写onUpgrade方法
db.execSQL("drop table if exists BOOK");
onCreate(db);
同时还需要更新版本号
添加数据,使用ConteneValues来添加
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name","THE DA VINCI CODE");
db.insert("Book",null,values);
更新数据,一样可以使用ContentValues
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price",10.99);
db.update("Book",values,"name=?",new String[]{"The Da Vinci Code"});
删除数据
SQLiteDatabse db = dbHelper.getWritableDataBase();
db.delete("Book","pages>?",new String[]{"500"});
查询数据
Cursor cursor = db.Helper.getWritableDatabase();
if(cursor.moveToFirst()){
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
}while(cursor.moveTonext());
}
cursor.close();
开源的关系,有很多好用的开源库,比如LitePal就是一个很好的数据库操作库
这个库其实就是创建一个Java Bean,也就是一个类,类名表示表名,里面的变量表示列名,一堆get/set方法。
然后使用Connector.getDatabase();就可以得到数据库了。就算后面更新也是一样的方法