Android中有5种存储方式:
- 使用SharedPreferences存储数据
- 文件存储数据
- SQLite数据库存储数据
- 使用ContentProvider存储数据
- 网络存储数据
1.SharedPreferences
使用方法:
- edit()开始编辑
- apply()和commit()提交数据;apply()效率快,线程安全;commit()效率慢,线程不安全。推荐使用apply()
- getXXX() 获取数据
- remove(“ ”)删除指定数据
- clear() 清空数据
简单示例:
//sp保存数据
SharedPreferences sharedPreferences;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建sp
sharedPreferences=getSharedPreferences("config",MODE_PRIVATE);
editText=(EditText) findViewById(R.id.editText);
//读取保存的数据,写到editText
//取数据,参数2为找不到“data”,key默认返回的数据
String data=sharedPreferences.getString("data","");
editText.setText(data);
}
//保存数据
public void saveData(View view){
//1 获取输入的内容
String data=editText.getText().toString();
//2 获取到编辑器
SharedPreferences.Editor editor=sharedPreferences.edit();
//3 保存数据
editor.putString("data",data);
//4 保存到文件
// editor.commit();//效率慢,线程安全
editor.apply();//效率快,线程不安全
}
//删除指定数据
public void deleteData(View view){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove("data");
// editor.commit();//效率慢,线程安全
editor.apply();//效率快,线程不安全
}
//清空数据
public void clearData(View view){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.clear();
// editor.commit();//效率慢,线程安全
editor.apply();//效率快,线程不安全
}
2.SQLite
SQLite是一款轻量级的数据库,提供了操控数据库的封装类,CRUD(添加(Create)、查询(Retrieve)、更新(Update)、删除(Delete))。
1.创建数据库:提供SQLiteOpenHelper抽象类,常用的方法:onCreate--数据库创建时执行;onUpgrade--数据库更新时执行;
onOpen--数据库每次打开执行
public class PersonOpenHelper extends SQLiteOpenHelper {
/**创建Person表的SQL语句*/
public static final String CREATE_PERSON="create table person_info(" +
" id integer primary key autoincrement," +
" person_name varchar(20)," +
" age integer(10)," +
" phone varchar(20));";
public PersonOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
// 数据库创建时执行 一般只执行一次
sqLiteDatabase.execSQL(CREATE_PERSON); // 执行创建表的SQL语句
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
// 数据库更新时执行
// 删除之前的person_info表
if (oldVersion == 1 && newVersion == 2) {
sqLiteDatabase.execSQL("alter table person_info add column phone varchar(20)");
}
}
}
2.数据库增删改查(CURD)
public SQLiteDatabase getDataBase() {
PersonOpenHelper openHelper = new PersonOpenHelper(this, "person.db", null, 2);
return openHelper.getWritableDatabase();
}
(1)添加(Create)
SQL语句:insert into person(name,age,phone) values(?,?,?)
public void insert(View v) {
//获取数据库对象
SQLiteDatabase dataBase = getDataBase();
// ? 为占位符
String sql = "insert into person(name,age,phone) values(?,?,?)";
//执行sql语句 通过 Object[] 依次用实际数据替换sql语句中的 ?占位符
dataBase.execSQL(sql, new Object[]{"zhangsan", "10", "13333333333"});
//关闭数据库,回收资源
dataBase.close();
}
(2)修改(Update)
SQL语句:update person_info set age=? where person_name=?
public void update(View v) {
SQLiteDatabase dataBase = getDataBase();
String sql = "update person_info set age=? where person_name=?";
//将 zhangsan 的年龄修改为 20
dataBase.execSQL(sql, new String[]{"20", "zhangsan"});
dataBase.close();
}
(3)查询(Retrieve)
SQL语句:select person_name,age,phone from person_info where person_name=?
public void query(View v) {
SQLiteDatabase dataBase = getDataBase();
String sql = "select person_name,age,phone from person_info where person_name=?";
//执行 rawQuery 查询,返回 Cursor 对象
Cursor cursor = dataBase.rawQuery(sql, new
String[]{"zhangsan"});
////如果游标还有下一个元素,跟我们集合中 Iterator 中 hasNext()方法类似
if (cursor.moveToNext()) {
//获取当前游标的第 0 个元素,元素是从 0 开始的,而不是 1
String person_name = cursor.getString(0);
//也可以通过列名来查询该字段在游标中的位置
int age = cursor.getInt(cursor.getColumnIndex("age"));
String phone = cursor.getString(2);
// 输出结果
Log.i("result", person_name + "..." + age + "..." + phone);
}
//关闭游标
cursor.close();
}
(4)删除(Delete)
SQL语句:delete from person_info where person_name=?
public void delete(View v) {
SQLiteDatabase dataBase = getDataBase();
dataBase.execSQL("delete from person_info where person_name=?",new Object[]{"zhangsan"});
dataBase.delete("person_info", "person_name=?", new String[]{"zhangsan"});
dataBase.close();
}
注:开发中常用第三方框架来存储数据,常见的有:GreenDao、realm、ActiveAndroid、LitePal、OrmLite;推荐使用GreenDao,运行效率高,内存消耗小,性能佳。
GreenDao的使用:https://blog.csdn.net/qq_36699930/article/details/81540781