初识Android | 青训营笔记
这是我参与「第四届青训营」笔记创作活动的的第7天
数据存储
SharedPreference存储(共享参数)
-
保存基于
XML文件存储的key-value键值对数据,通常用来存储一些简单的配置信息。 -
适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型、基本类型的值。 -
存储步骤:- 使用
Activity类的getSharedPreferences方法获得SharedPreferences对象; - 使用
SharedPreferences接口的edit获得SharedPreferences.Editor对象; - 通过
SharedPreferences.Editor接口的putXXX方法保存key-value对; - 通过
SharedPreferences.Editor接口的commit方法保存key-value对。
- 使用
-
读取数据:- 使用
Activity类的getSharedPreferences方法获得SharedPreferences对象; - 通过
SharedPreferences对象的getXXX方法获取数据
- 使用
-
代码演示:
import androidx.appcompat.app.AppCompatActivity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText etName,etAge;
private Button btnSave,btnResume;
private SharedPreferences sp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
sp = getSharedPreferences("configs", MODE_PRIVATE);
}
private void initView() {
etName = (EditText) findViewById(R.id.et_name);
etAge = (EditText) findViewById(R.id.et_age);
btnSave = (Button) findViewById(R.id.btn_save);
btnResume = (Button) findViewById(R.id.btn_resume);
btnSave.setOnClickListener(this);
btnResume.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btn_save: //保存数据
String name = etName.getText().toString().trim();
String age = etAge.getText().toString().trim();
if (TextUtils.isEmpty(name) || TextUtils.isEmpty(age)){
return;
}
// 编辑器
SharedPreferences.Editor editor = sp.edit();
// 数据存储,只能存储简单的数据类型
editor.putString("name",age);
editor.putString("age",name);
// 提交 --> 对数据的一个保存
boolean commit = editor.commit();
if (commit){
Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show();
etName.setText("");
etAge.setText("");
}
break;
case R.id.btn_resume: //恢复数据
String nameValue = sp.getString("name","");
String ageValue = sp.getString("age","");
etName.setText(nameValue);
etAge.setText(ageValue);
break;
}
}
}
文件存储
-
存储二进制格式文件
-
存储步骤:- 调用
openFileInput()并传递要读取的文件的名称。这返回一个FileInputStream。 - 从文件中读取字节
read()。 - 然后关闭流
close()。
- 调用
ContentProvider
- 跨进程共享数据
- 安卓四大组件之一
- 把私有数据暴露给其他的应用,通常把私有数据库的数据暴露给其他的应用。
数据库存储(
SQLite数据库)
-
复杂对象存储
-
需要对数据进行增删改查
-
一般数据采用的固定的静态数据类型,而
SQLite采用的是动态数据类型,会根据存入值自动判断。 -
存储步骤:- 创建数据库需要使用到一个抽象类
SQLiteOpenHelper;(onCreate():创建数据库;onUpgrade():升级数据库) - 创建数据库表:
//创建数据库的表 @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL("create table user(" + "id integer " + "primary key autoincrement,username " + "varchar(20),password varchar(20)," + "age integer)"); }MainActivity中实例化对象:public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //创建好数据库,并与数据库之间建立连接 DBOpenHelper dbOpenHelper=new DBOpenHelper(MainActivity.this,"test",null,1); //打开数据库,返回一个可对数据读写操作的对象 SQLiteDatabase sqLiteDatabase=dbOpenHelper.getWritableDatabase(); findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //方法一:直接执行数据库执行语句 //sqLiteDatabase.execSQL(""); //方法二: //类似hashmap,以键值对保存数据 key->数据表列名 value->列的值 ContentValues contentValues=new ContentValues(); contentValues.put("username","test1234"); contentValues.put("password","123456"); contentValues.put("age",19); sqLiteDatabase.insert("user",null,contentValues); } }); } }
- 创建数据库需要使用到一个抽象类
比较
数据库框架
Room:官方对SQLliteOpenHelper的再封装。Room:包含三个主要组件:- 数据库表实体(
Database),用于表示应用的数据库中的表。 - 数据访问对象 (DAO),提供您的应用可用于查询、更新、插入和删除数据库中的数据的方法。
- 数据库类(
Entity),用于保存数据库并作为应用持久性数据底层连接的主要访问点。
- 数据库表实体(
参考资料: