您好!欢迎来到源码码网

Android数据本地存储之SharedPreferencess使用

  • 源码教程
  • 来源:源码码网
  • 编辑:admin
  • 时间:2021-02-19 19:17
  • 阅读:525

无论是桌面应用程序还是 Android 手机应用程序,都会涉及数据的存储。下面我们将会详细介绍在 Android 中存储数据的相关知识。

在 Android 中应用程序存储的数据(包括文件)都属于应用程序私有,但同时也提供了 ContentProviders(数据共享),方便应用程序将私有的数据分享给其他程序使用。

数据存储方式共分为5种,分别为:

  • SharedPreferences。

  • 内部存储(Internal Storage)。

  • 外部存储(External Storage)。

  • SQLite数据库存储。

  • 网络存储。


其中,网络存储在本质上是对网络资源的获取和访问,其相关内容会在网络编程教程中进行介绍。

此外,Android 系统框架提供了 ContentProvider 来实现各种应用程序间持久化数据的共享。

下面我们先来介绍一下第一种 SharedPreferences。

SharedPreferences

SharedPreferences 是 Android 系统提供的一个通用的数据持久化框架,用于存储和读取 key-value 类型的原始基本数据对。

目前仅支持 boolean、float、int、long 和 string 等基本类型的存储,对于自定义的复合数据类型,是无法使用 SharedPreferences 进行存储的。

SharedPreferences 主要用于存储系统的配置信息,类似于 Windows 下常用的 .ini 文件。

例如上次登录的用户名、上次最后设置的信息等,通过保存上一次用户所做的修改或者自定义参数设定,当再次启动程序后依然保持原有设置。它是用键值对的方式存储的,方便管理写入和读取。

使用 SharedPreferences 的步骤如下:

1) 获取Preferences

每个 Activity 默认都有一个 SharedPreferences 对象,获取 SharedPreferences 对象的方法有两种:

1)SharedPreferences getSharedPreferences(String name, int mode)。

使用该方法获取 name 指定的 SharedPreferences 对象,并获取对该 SharedPreferences 对象的读写控制权。

当应用程序中可能使用到多个 SharedPreferences 时使用该方法。

2)SharedPreferences getPreferences(int mode)。

当应用程序中仅需要一个SharedPreferences对象时,使用该方法获取当前 Activity 对应的 SharedPreferences,而不需要指定 SharedPreferences 的名字。

其中,参数 mode 有 4 种取值,分别是:

  • MODE_PRIVATE:默认方式,只能被创建的应用程序或者与创建的应用程序具有相同用户 ID 的应用程序访问。

  • MODE_WORLD_READABLE:允许其他应用程序对该 SharedPreferences 文件进行读操作。

  • MODE_WORLD_WRITEABLE:允许其他应用程序对该 SharedPreferences 文件进行写操作。

  • MODE_MULTI_PROCESS:在多进程应用程序中,当多个进程都对同一个 SharedPreferences 进行访问时,该文件的每次修改都会被重新核对。

2) 获取 SharedPreferences.Editor

调用 edit() 方法获取 SharedPreferences.Editor,SharedPreferences 通过该接口对其内容进行更新。

3) 更新 SharedPreferences

通过 SharedPreferences.Editor 接口提供的 put 方法对 SharedPreferences 进行更新。

例如使用 putBoolean(String key, boolean value)、putFloat(String key, float value) 等方法将相应数据类型的数据与其 key 对应起来。

4) 提交

调用 SharedPreferences.Editor 的 commit() 方法将更新提交到 SharedPreferences 中。

使用 SharedPreferences

实例 SharedPreferencesDemo 演示了 SharedPreferences 对象的使用方法。

该实例的运行效果如图 1 所示。

SharedPreferencesDemo

图 1  SharedPreferencesDemo

当用户在该实例运行时,在文本框中输入电话号码和所在城市,例如 13800000000 和 beijing,单击回退按钮退出应用程序时,该应用程序将相关信息写入其对应的 SharedPreferences 中。

当用户再次启动该应用程序时,之前填写到文本框内的信息会被从 SharedPreferences 中读取并显示出来,以方便用户修改。

实例 SharedPreferencesDemo 中的布局文件 main.xml 中放置了三个 TextView 和两个 EditText,其中两个 EditText 按照 TextView 的要求输入电话号码和城市。其代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>

  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  3. android:layout_width="fill_parent"

  4. android:layout_height="fill_parent"

  5. android:orientation="vertical">


  6. <TextView

  7. android:layout_width="fill_parent"

  8. android:layout_height="wrap_content"

  9. android:text="使用 Shared Preferences 存储程序信息" />


  10. <TextView

  11. android:layout_width="fill_parent"

  12. android:layout_height="wrap_content"

  13. android:text="您的电话号码" />


  14. <EditText

  15. android:id="@+id/phone_text"

  16. android:layout_width="fill_parent"

  17. android:layout_height="wrap_content"

  18. android:hint="输入电话号码" />


  19. <EditText

  20. android:id="@+id/city_text"

  21. android:layout_width="fill_parent"

  22. android:layout_height="wrap_content"

  23. android:hint="输入城市名称" />


  24. </LinearLayout>

实例 SharedPreferencesDemo 中 AndroidManifest.xml 的代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>

  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"

  3. package="introduction.android.SharedPreferencesDemo"

  4. android:versionCode="1"

  5. android:versionName="1.0">


  6. <uses-sdk android:minSdkVersion="14" />

  7. <application

  8. android:allowBackup="true"

  9. android:icon="@mipmap/ic_launcher"

  10. android:label="@string/app_name"

  11. android:roundIcon="@mipmap/ic_launcher_round"

  12. android:supportsRtl="true"

  13. android:theme="@style/AppTheme">

  14. <activity android:name=".MainActivity">

  15. <intent-filter>

  16. <action android:name="android.intent.action.MAIN" />


  17. <category android:name="android.intent.category.LAUNCHER" />

  18. </intent-filter>

  19. </activity>

  20. </application>


  21. </manifest>


实例 SharedPreferencesDemo 中 MainActivity.java 的代码如下:

  1. import javax.security.auth.PrivateCredentialPermission;


  2. import android.app.Activity;

  3. import android.content.SharedPreferences;

  4. import android.os.Bundle;

  5. import android.widget.EditText;


  6. public class MainActivity extends Activity {

  7. private EditText phoneText, cityText;

  8. private String phone, city;

  9. public static final String SET_INFO = "SET_Info";

  10. public static final String PHONE = "PHONE";

  11. public static final String CITY = "CITY";


  12. @Override


  13. public void onCreate(Bundle savedInstanceState) {

  14. super.onCreate(savedInstanceState);

  15. setContentView(R.layout.activity_main);

  16. phoneText = (EditText) findViewById(R.id.phone_text);

  17. cityText = (EditText) findViewById(R.id.city_text);

  18. /*获取Shared Preferences对象*/

  19. SharedPreferences setinfo = getPreferences(Activity.MODE_PRIVATE);

  20. /*取出保存的电话号码和地址信息*/

  21. phone = setinfo.getString(PHONE, "");

  22. city = setinfo.getString(CITY, "");

  23. /*将取出的信息分别放在对应的EditText中*/

  24. phoneText.setText(phone);

  25. cityText.setText(city);

  26. }


  27. @Override

  28. protected void onStop() {

  29. SharedPreferences setinfo = getPreferences(Activity.MODE_PRIVATE);

  30. setinfo.edit()

  31. .putString(PHONE, phoneText.getText().toString())

  32. .putString(CITY, cityText.getText().toString())

  33. .commit();

  34. super.onStop();

  35. }

  36. }

该 Activity 在启动时通过 onCreate() 方法从其 SharedPreferences 中获取相应数据,在 onStop() 方法中将相应数据写入 SharedPreferences 中,其中:

SharedPreferences setinfo=getPreferences(Activity.MODE_PRIVATE);

用于获取当前 Activity 默认的 SharedPreferences 对象,该对象没有名字。当然,也可以通过 getSharedPreferences(String name, int mode) 方法来创建并获取一个带有名字的 SharedPreferences。

该 SharedPreferences 被创建后,可以在应用程序的包路径下,即 data/data/<your package name>/shared_prefs 文件夹下找到该文件。


特别声明:
1、如无特殊说明,内容均为本站原创发布,转载请注明出处;
2、部分转载文章已注明出处,转载目的为学习和交流,如有侵犯,请联系客服删除;
3、编辑非《源码码网》的文章均由用户编辑发布,不代表本站立场,如涉及侵犯,请联系删除;
全部评论(0)
推荐阅读
  • 大型后台管理系统,用户登录状态该如何保存?
  • 大型后台管理系统,用户登录状态该如何保存?
  • 大型后台管理系统的用户登录状态保存需要综合考虑安全性、用户体验和系统架构。以下是企业级的完整方案:1.多层级存储策略class AuthManager {    constructor() {        this.storage = { &n
  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2025-11-06 12:16
  • 阅读:350
  • 源码交易平台的支付困局与解决方案:如何通过专业支付系统提升交易效率
  • 源码交易平台的支付困局与解决方案:如何通过专业支付系统提升交易效率
  • 在数字经济蓬勃发展的今天,源码交易市场已成为互联网创业者和开发商的重要资源池。从电商系统源码到社交应用框架,从小程序解决方案到企业级管理系统,越来越多的开发者、初创企业和传统商家通过源码交易平台快速获取技术资产,实现商业目标的加速。源码交易市场的繁荣反映了数字化转型的迫切需求——企业需要快速迭代,开发者需要快速变现,用户需要快速启动。然而,在这个高速发展的市场中,一个长期被忽视但至关重要的问题浮现出来:支付系统的效率与安全性已成为制约交
  • 行业资讯
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2025-10-23 15:16
  • 阅读:298
  • Spring Boot 工程中 maven-surefire-plugin 测试执行失败及解决方法
  • Spring Boot 工程中 maven-surefire-plugin 测试执行失败及解决方法
  • 在SpringBoot工程编译时遇到maven-surefire-plugin的测试执行失败错误(Failedtoexecutegoalorg.apache.maven.plugins:maven-surefire-plugin:3.5.3:test),通常与测试环节相关。以下是常见原因及解决方法:1.测试用例执行失败• 原因:最常见的是测试用例(*Test.java)运行时抛出异常(如断言失败、空指针等),导
  • 源码教程
  • 来源:源码码网
  • 编辑:源码码网
  • 时间:2025-10-13 10:57
  • 阅读:363
  • WeMark - 微信小程序图片水印
  • WeMark - 微信小程序图片水印
  • 一个纯前端的微信小程序图片水印工具。支持文字/图片水印、单个与全屏两种模式,透明度与角度调节、单个水印位置X/Y控制,预览与对比模态、历史记录(100条)等功能。
  • 源码教程
  • 来源:源码码用户
  • 编辑:yg
  • 时间:2025-09-22 16:09
  • 阅读:287
联系客服
源码代售 源码咨询 素材咨询 联系客服
029-84538663
手机版

扫一扫进手机版
返回顶部