数据存储Android中的数据持久化技术【文件存储/SharedPreferences/SQLite数据库】

数据持久化:一种机制,是内存数据模型和存储数据模型的相互转化。

Android中的瞬时数据:存储在内存中,有可能会因为程序关闭或其它原因导致内存被回收而丢失的数据。

Android中常用的持久化技术


1.文件存储

    文件存储是Android中最基本的一种数据存储方式,它不对存储的内容进行任何的格式化处理,所有数据都是原封不动地保存到文件中的,因而它比较适合用于存储一些简单的文本数据或二进制数据

1.1存

    package  android.content -> Context -> public abstract FileOutputStream openFileOutput(String name, @FileMode int mode)

Context类中提供了一个openFileOutput()方法,用于将数据存储到指定文件中。

可以看到有两个参数,String name和int mode

其中String name即文件名,要存储数据的文件的名字,PS:只是名字,不是路径。因为所有文件都默认(/data/data/app_package/files/)存储到当前应用的目录下,其他应用是不可访问的,除非你给他权限。

第二个参数int mode 顾名思义,操作模式,即存储文件的方式。一共有4种模式。

  1. MODE_PRIVATE    默认的操作模式,私有,当前应用可见,文件名相同时覆盖原文件内容。
  2. MODE_APPEND    追加,当前应用可见,文件名相同时在原文件内容的基础上追加。
  3. MODE_WORLD_READABLE    可读,允许其他应用访问。(Andorid4.2已废除)
  4. MODE_WORLD_WRITEABLE    可写,允许其他应用修改。(Andorid4.2已废除)

openFileOutput()返回的是一个FileOutputStream对象,得到这个对象后使用Java流将数据写入文件。

1.2读

    package android.content->Context->public abstract FileInputStream openFileInput(String name)

同样Context类中也提供了一个openFileInput()方法,用于从文件中读取数据。

openFileInput只有一个参数,即要读取的文件名。

openFileInput()返回的是一个FileInputStream对象,得到这个对象就后使用Java流的将数据从文件中读取。

1.3demo演示-实现活动销毁时自动保存数据并在活动再次打开时读取数据。


布局就一个输入框

<EditText
    android:id="@+id/edit"
    android:hint="输入你要存的数据"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

主要看Activity

public class MainActivity extends AppCompatActivity {

    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.edit);
//        在活动创建时调用将上次退出时保存的数据展示出来
        read();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
//        onDestory是活动在被销毁之前调用的,这里在调用了write()实现了在销毁活动之前将数据保存到文件里。
        write();
    }

    //存储
    public void write() {
//        获取数据框的值
        String data = editText.getText().toString();
        FileOutputStream out;
        BufferedWriter writer = null;

        try {
//            openFileOutput方法用于将数据存储到文件中。这个方法接收两个参数,文件名和操作模式
            out = openFileOutput("something", MODE_PRIVATE);
            writer = new BufferedWriter(new OutputStreamWriter(out));
            writer.write(data);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
//            close也需要try-catch
            try {
                if (writer != null) writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    //    读取
    public void read() {

        FileInputStream input;
        BufferedReader reader = null;
        String data = "";

        try {
            input = openFileInput("something");
            reader = new BufferedReader(new InputStreamReader(input));

//            这里读取一行。存入的时候一个回车算一行
            data = reader.readLine();

//            如果要读取多行请放开这部分代码
//            多行读取开始
//            String line = "";
//            while ((line = reader.readLine()) != null) {
//                data = data + "\n" + line;
//            }
//            多行读取结束

//            把拿到的值放到输入框
            editText.setText(data);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (reader != null) {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

写的自认为比较详细,注意看注释,需要注意到的地方都带有注释。

2.SharedPreferences

    SharedPrefences使用键值对的方式存储数据,支持多种数据类型存储(存int取int,存String取String)。

    保存下来的文件是XML格式。

2.1存

获取SharedPerferences对象Android主要提供了3种方法。

  1. Context类中的getSharedPerferences()方法。
    类似于文件存储,也是两个参数,第一个参数指定文件名,第二个参数指定操作模式,值得注意的是,操作模式目前仅剩下MODE_PRIVATE / 0 可用,其他模式在Android4.2和Android6.0之后已被遗弃。
  2. Activity类中的getPerferences()方法。
    同理,不过只有一个参数,操作模式,同样也是一种操作模式。
    它会自动将当前活动的类名作为SharedPerferences的文件名,所以只需要一个参数。
  3. PreferenceManager类中的getDefaultSharedPreferences()方法。
    一个静态方法,它接收一个Context参数,并自动使用当前程序的包名作前缀来命名SharedPerferences文件。

这里着重讲一下第三种方法,因为我们最常用的就是第三种方法。

第三种方法的实现步骤主要分为三步。

  1. 调用SharedPreferences对象的edit()方法来获取一个SharedPreferences.Editor对象。
  2. 使用putString()向SharedPreferences.Editor对象中添加数据。
  3. 使用applay()提交数据。

2.2读

SharedPreferences对象中提供了一系列的get方法,用于对存储的数据进行读取,每个get方法都对应了SharedPreferences.Editor中的一种put方法。

这些get方法都接收两个参数:存入的值的键,找不到这个值后使用的默认值。

2.3demo演示-实现记住密码和自动登陆。





3.SQLite数据库

    Android内置的轻量级关系型数据库,运算速度快,占用少,遵循ACID事务,支持标准SQL语法。

3.1创建数据库

Android专门提供了一个SQLiteOpenHelper帮助类,借助这个类就可以对数据库进行各种操作。

SQLiteOpenHelper是一个抽象类,所以需要自己谢一个DBHelper去继承SQLiteOpenHelper。

它提供了两个我们需要去重写的抽象方法onCreate()和onUpgrade()来实现创建库和升级库。

它还提供了两个实例方法getReadableDatabase()和getWritableDatabase()来创建或获取一个库。

3.2demo演示-实现简易学生管理系统的增删改查



数据存储

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值