Android学习之使用SharedPreferences存储应用程序数据

让我来为你详细讲解 "Android学习之使用SharedPreferences存储应用程序数据" 的完整攻略。

什么是SharedPreferences?

SharedPreferences是Android中的一个轻量级存储类,用来保存应用程序的配置信息或者一些简单的数据。

SharedPreferences本质上是一个基于XML文件存储键值对的数据结构,易于操作和实现。只要简单的几行代码,就可以实现数据的存储和读取。

使用SharedPreferences存储数据

1.获取SharedPreferences对象

获取SharedPreferences对象需要调用getSharedPreferences()或getPreferences()方法。其中getSharedPreferences()方法是通过指定名称(SharedPreferences文件名称)来获取对象,而getPreferences()方法则是通过使用当前类的类名作为名称来获取对象,这里我们以getSharedPreferences()方法为例。

SharedPreferences sharedPreferences = getSharedPreferences("myData", Context.MODE_PRIVATE);

这里的"myData"代表SharedPreferences文件的名称,Context.MODE_PRIVATE表示文件的访问模式,MODE_PRIVATE代表只能被本应用程序访问。

2.存储数据

使用SharedPreferences存储数据需要通过SharedPreferences.Editor对象来实现,Editor对象中提供了一系列的putXX()方法,可以存储各种类型的数据,如putString()、putBoolean()、putInt()等等。

SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username", "Tom");
editor.putInt("age", 20);
editor.putBoolean("isLogin", true);
editor.apply();

3.读取数据

使用SharedPreferences读取数据也需要通过SharedPreferences对象,可以调用相应的getXX()方法来获取数据,如果获取的key不存在,则返回默认值。

String username = sharedPreferences.getString("username", "");
int age = sharedPreferences.getInt("age", 0);
boolean isLogin = sharedPreferences.getBoolean("isLogin", false);

示例1:使用SharedPreferences存储和读取一个计数器的值

下面是一个示例程序,通过按钮点击实现存储和读取一个计数器的值。点击“+1”按钮,计数器加1并存储到SharedPreferences中;点击“读取”按钮,从SharedPreferences中读取计数器的值并显示在TextView上。

public class MainActivity extends AppCompatActivity {

    private TextView tvCount;
    private int count = 0;
    private SharedPreferences sharedPreferences;

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

        tvCount = findViewById(R.id.tv_count);
        Button btnAdd = findViewById(R.id.btn_add);
        Button btnRead = findViewById(R.id.btn_read);

        sharedPreferences = getSharedPreferences("myCount", Context.MODE_PRIVATE);

        count = sharedPreferences.getInt("count", 0);
        tvCount.setText(String.valueOf(count));

        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count++;
                tvCount.setText(String.valueOf(count));
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putInt("count", count);
                editor.apply();
            }
        });

        btnRead.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                count = sharedPreferences.getInt("count", 0);
                tvCount.setText(String.valueOf(count));
            }
        });
    }
}

在这个例子中,我们通过getSharedPreferences()方法获取了一个SharedPreferences对象,以文件名为"myCount",然后通过SharedPreferences对象来读取、保存计数器的值。

示例2:使用SharedPreferences实现登录状态的保存与读取

下面是一个示例程序,通过EditText输入用户名和密码,点击登录按钮来实现登录操作。如果登录成功,则将登录状态保存到SharedPreferences中;如果退出登录,则将登录状态从SharedPreferences中清除。

public class LoginActivity extends AppCompatActivity {

    private EditText etUsername;
    private EditText etPassword;
    private CheckBox checkBox;
    private SharedPreferences sharedPreferences;

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

        etUsername = findViewById(R.id.et_username);
        etPassword = findViewById(R.id.et_password);
        checkBox = findViewById(R.id.checkbox);
        Button btnLogin = findViewById(R.id.btn_login);

        sharedPreferences = getSharedPreferences("loginState", Context.MODE_PRIVATE);

        if (sharedPreferences.getBoolean("isLogin", false)) {
            etUsername.setText(sharedPreferences.getString("username", ""));
            etPassword.setText(sharedPreferences.getString("password", ""));
            checkBox.setChecked(true);
        }

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username = etUsername.getText().toString().trim();
                String password = etPassword.getText().toString().trim();
                if (TextUtils.isEmpty(username) || TextUtils.isEmpty(password)) {
                    Toast.makeText(LoginActivity.this, "用户名和密码不能为空", Toast.LENGTH_SHORT).show();
                } else {
                    if (username.equals("admin") && password.equals("123456")) {
                        if (checkBox.isChecked()) {
                            SharedPreferences.Editor editor = sharedPreferences.edit();
                            editor.putString("username", username);
                            editor.putString("password", password);
                            editor.putBoolean("isLogin", true);
                            editor.apply();
                        }
                        Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(LoginActivity.this, "用户名或密码错误", Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });
    }
}

在这个例子中,我们通过getSharedPreferences()方法获取了一个SharedPreferences对象,以文件名为"loginState",然后通过SharedPreferences对象来保存和读取登录状态,以实现自动登录的功能。

以上就是使用SharedPreferences存储数据的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android学习之使用SharedPreferences存储应用程序数据 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • C++实现高性能转换大小写算法示例

    C++实现高性能转换大小写算法示例攻略 本攻略将详细介绍如何使用C++实现高性能的转换大小写算法。我们将使用标准的markdown格式文本进行说明。 1. 算法概述 转换大小写算法是将字符串中的字母字符转换为大写或小写形式的过程。在C++中,我们可以使用标准库函数或自定义函数来实现这一功能。为了实现高性能的转换大小写算法,我们将使用位运算和字符指针来提高效率…

    other 2023年8月16日
    00
  • h1z1无法连接网络怎么办 h1z1网络连接失败解决方法

    h1z1无法连接网络怎么办 h1z1网络连接失败解决方法 如果在玩h1z1游戏时遇到了无法连接网络或者网络连接失败的问题,可能会影响到游戏的体验。下面将详细介绍一些解决方法。 1. 检查网络连接 首先要检查一下网络连接是否正常。可以尝试打开其他网页或者使用其他应用程序,看看是否也存在连接问题。如果其他应用程序也无法连接到网络,那么可能是网络本身出现了问题。 …

    other 2023年6月27日
    00
  • PHP call_user_func和call_user_func_array函数的简单理解与应用分析

    PHP call_user_func和call_user_func_array函数的简单理解与应用分析 1. call_user_func函数 作用 call_user_func函数用于动态地调用一个回调函数。 语法 call_user_func(callback $callback [, mixed $parameter [, mixed $… ]] …

    other 2023年6月28日
    00
  • 功能强大的Android滚动控件RecyclerView

    功能强大的Android滚动控件RecyclerView攻略 介绍 RecyclerView是Android平台上一个功能强大的滚动控件,用于展示大量数据列表。相比于ListView,RecyclerView提供了更高的灵活性和性能优化。本攻略将详细介绍RecyclerView的使用方法和一些常见示例。 步骤 步骤1:添加依赖 在项目的build.gradl…

    other 2023年8月21日
    00
  • mysql时间与字符串之间相互转换

    MySQL时间与字符串之间相互转换 MySQL 是一款使用广泛的关系型数据库管理系统,时间和日期是其常用数据类型之一。在 MySQL 中,可以通过各种函数和关键字来进行时间和字符串之间的相互转换。本文将介绍一些常用的 MySQL 时间和字符串相互转换方法。 时间转字符串 在 MySQL 中将时间转换成字符串有许多方法,其中最常用的是 DATE_FORMAT …

    其他 2023年3月28日
    00
  • opencv模板匹配函数matchtemplate详解

    OpenCV是一个流行的计算机视觉库,提供了许多图像处理和计算机视觉算法。其中之一是模板匹配,它可以在图像中查找特定的模式。在本攻略中,我们将介绍OpenCV中的模板匹配函数matchTemplate的细信息。 matchTemplate函数 matchTemplate函数是OpenCV中用于模板匹配的函数。它采用两个参数:源图像和模板像,并返回一个匹配结果…

    other 2023年5月7日
    00
  • jenkins部署分支报finished:unstable的问题解决

    当然,我可以为您提供有关“Jenkins部署分支报finished:unstable的问题解决”的完整攻略,以下是详细说明: 问题描述 在使用Jenkins分支部署时,可能会遇到“finished:unstable”状态的问题。这种情况通常表示构建过程中出现了一些问题,但构建仍然完成了。这可能会导致部署失败或出现其他问题。 问题解决 以下是解决Jenkins…

    other 2023年5月7日
    00
  • 使用whiptail写linux字符界面ssh链接工具2.0

    使用whiptail编写字符界面ssh链接工具2.0 1. 引言 在Linux系统中,使用ssh命令可以方便地登录远程主机,进行管理和操作。但是,如果需要经常登录多个主机,手动输入IP地址,用户名和密码是比较繁琐的事情。因此,为了提高效率,我们可以使用一个字符界面的ssh链接工具来管理和连接多个主机。 本文将介绍如何使用Whiptail编写一个字符界面的ss…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部