实战第9篇:SharedPreferences持久化存储记事本

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情


看完这1200字,你将获得如下技能:写一个带有存储功能的记事本。

image7.GIF

一、理论

主要涉及的知识:SharedPreferences存储,它的读取写入方法。

1.1 共享首选项 SharedPreferences

Android中持久化存储有多种方式,最简单的一种就是SharedPreferences

SharedPreferences不好翻译,都叫它SP,大家经常说把数据存到SP里。

如果要硬翻译的话,比较恰当的是:共享的首选项

Shared就是共享的,可读可写,能存能取。Preferences在开发工具中比较常见,是首选项的意思,存储一些个人的偏好,比如快捷键,字体大小等。

image3.png

从这里看出,其实,它就是存储一些简单且不重要的设置信息。比如是否记住密码、是否看过引导页啥的,这也是为啥软件卸载之后,引导页还会重新出现一遍的原因。

1.2 存储原理

SharedPreferences其实最终存储到xml文件中,这个文件位于你程序包名下的shared_prefs文件夹中。

image4.png

如上图所示,完全是以键值对的形式存储,格式为:<[数据类型] name="[键]" value="[值]"/>

1.3 读取方式

如果要操作数据,首先需要通过getSharedPreferences创建一个SharedPreferences对象,后面的读取、写入都通过这个对象实现。

// 创建一个SharedPreferences对象
SharedPreferences sharedPreferences = getSharedPreferences("book", MODE_PRIVATE);

// 【读】取出文本对象
String text = sharedPreferences.getString("text", "");

// 【写】实例化一个SharedPreferences.Editor对象
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("text", "hello");// 将值放入文件
editor.commit(); // 提交
复制代码

读取的话,直接get对应的数据类型就可以了,例如getString("[键]", "[默认值-读不到显示它]")

写入的话,需要先获取一个编辑者editor,然后,通过editor来对某种类型的数据进行写入,例如:editor.putString("[键]", "[写入的内容]")

支持写入的类型:

image5.png

支持读出的类型:

image6.png

要注意,写入的类型和读出的类型要保持一致,否则会报错。

二、实战

有了相应的知识储备,我们就来开发下面的这个记事本App吧!

image7.GIF

首先,进入页面是输入框EditText,这个控件之前也讲过。

然后,我们在里面输入内容,当我们离开,需要将内容保存起来。

最后,下一次我们再进来,需要将原来保存的内容读出来并显示。

首先是布局,我决定还是放出来代码(因为里面有些美化的设置,比如输入框全屏、光标置顶):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context=".MainActivity">
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:ems="10"
        android:inputType="textPersonName"
        android:hint="请输入内容"
        android:gravity="top"
        android:textSize="22sp"
        />
</LinearLayout>
复制代码

接着,是我们的Activity,这里面要处理逻辑。

public class MainActivity extends Activity {

    private EditText editText;
    SharedPreferences sharedPreferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
        // 创建一个SharedPreferences对象
        sharedPreferences = getSharedPreferences("book", MODE_PRIVATE);
        // 取出文本对象
        String text = sharedPreferences.getString("text", "");
        editText.setText(text);
    }

    @Override
    protected void onStop() {
        super.onStop();
        //实例化SharedPreferences.Editor对象
        SharedPreferences.Editor editor = sharedPreferences.edit();
        // 将获取过来的值放入文件
        editor.putString("text", editText.getText().toString());
        editor.commit();  // 提交
    }
}
复制代码

代码基本是按照上面我们说的流程走的,其中重点说一下数据的保存时机,我们是放到onStop方法中了。这里面涉及到了Activity的生命周期

好了,最后点击运行,启动服务,去看看效果吧。

三、关于

现在,行业内多是Android转Java,很少有Java转Android的。

但是,这并不妨碍Java同学了解Android开发,从学习的角度去拓宽自己的知识面。

所以,我会以最精简的语言来编写一个系列教程《Java转Android》(第一季30篇,日更)。

其实,不管是Java还是python,只要有编程基础的同学,一天看800字,30天可入门安卓。

猜你喜欢

转载自juejin.im/post/7129666495692406820