目录

SharedPreferences 简介

代码演示


SharedPreferences 简介

  • SharedPreferences(偏好设定)——保存用户偏好参数,注意不适合存在大数据!
  • 当应用想要保存用户的一些偏好参数,比如是否自动登陆?是否记住账号密码?是否在 Wifi 下才能联网?以及登录的账号密码等等相关信息,此时如果使用数据库,会显得有点大材小用!
  • 把上面这些配置信息称为用户的偏好设置,这些配置信息通常是保存在特定的文件中,比如 windows 使用 ini 文件, 而 Java 中通常使用 properties 属性文件或 xml 文件。
  • Android 中通常使用 一个轻量级的存储类——SharedPreferences 来保存用户的偏好参数,SharedPreferences 也是使用 xml 文件,然后类似于 Map 集合,使用 键—值 形式来存储数据,方便存取。
  • SharedPreferences 的数据存储在应用的私有目录下,除非是卸载 APP,否则数据就一直在的。
  • SharedPreferences  使用简要流程图:

代码演示

  • 需求效果如下,第一次设置时,输入框为空,必须用户手动输入账号与密码,再点击 "保存" 按钮进行保存,保存成功之后关掉 APP ,再次打开 APP 时数据自动进行回显。

  • 布局文件 activity_main.xml 文件内容如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><EditTextandroid:id="@+id/userName"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="账号" /><EditTextandroid:id="@+id/userPass"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="密码"android:inputType="textPassword" /><Buttonandroid:id="@+id/buttonLogin"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="保存" />
</LinearLayout>
  • 偏好设定帮助类 SharedHelper.java 文件内容如下:
package com.lct.www.yuan.helper;import android.content.Context;
import android.content.SharedPreferences;
import android.widget.Toast;import java.util.HashMap;
import java.util.Map;/*** SharedPreferences(偏好设定帮助类)*/
public class SharedHelper {/*** 应用环境上下文*/private Context context;public SharedHelper(Context context) {this.context = context;}/*** 保存偏好设定数据** @param userName :账号* @param userPass : 密码*/public void saveUserData(String userName, String userPass) {/*** getSharedPreferences(String name, @PreferencesMode int mode)* name=loginData :偏好设定的文件名,不要写文件格式,SharedPreferences 会自动处理,文件不存在时会自动创建* Context.MODE_PRIVATE:文件模式,private(私有模式),表示这些偏好设定数据只能本应用使用,或者同一个用户 ID 的应用相互访问* 此种模式下,如果 key 已经存在,则覆盖,即更新,否则不存在时,则添加*/SharedPreferences sharedPreferences = context.getSharedPreferences("loginData", Context.MODE_PRIVATE);SharedPreferences.Editor editor = sharedPreferences.edit();editor.putString("userName", userName);editor.putString("userPass", userPass);editor.commit();Toast.makeText(context, "数据写入 SharedPreference", Toast.LENGTH_SHORT).show();}/*** 读取偏好设定数据** @return*/public Map<String, String> readUserData() {Map<String, String> data = new HashMap<>();/*** getSharedPreferences(String name, @PreferencesMode int mode)* name=loginData :偏好设定的文件名,不要写文件格式,SharedPreferences 会自动处理* Context.MODE_PRIVATE:文件模式,private(私有模式),表示这些偏好设定数据只能本应用使用,或者同一个用户 ID 的应用相互访问*/SharedPreferences sharedPreferences = context.getSharedPreferences("loginData", Context.MODE_PRIVATE);/*** getString(String key, @Nullable String defValue):取值* 当值不存在时,默认为空*/data.put("userName", sharedPreferences.getString("userName", ""));data.put("userPass", sharedPreferences.getString("userPass", ""));return data;}
}
  • 主活动 MainActivity.java 文件内容如下:
package com.lct.www.yuan;import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import com.lct.www.yuan.helper.SharedHelper;import java.util.Map;import static android.widget.Toast.LENGTH_SHORT;public class MainActivity extends AppCompatActivity {private Context context;private SharedHelper sharedHelper;private EditText editTextUserName;private EditText editTextUserPass;private Button buttonLogin;/*** 活动被创建时触发** @param savedInstanceState*/@Overrideprotected void onCreate(Bundle savedInstanceState) {Log.i("Wmx logs::", "活动创建...");super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);context = getApplicationContext();sharedHelper = new SharedHelper(context);bindViews();}/*** 活动为用户可见时触发——读取偏好设定数据进行回显,不存在时显示为空*/@Overrideprotected void onStart() {Log.i("Wmx logs::", "活动显示...");super.onStart();Map<String, String> data = sharedHelper.readUserData();editTextUserName.setText(data.get("userName"));editTextUserPass.setText(data.get("userPass"));}/*** 当活动被销毁时触发*/@Overrideprotected void onDestroy() {Log.i("Wmx logs::", "活动销毁...");super.onDestroy();}/*** 视图绑定*/private void bindViews() {editTextUserName = findViewById(R.id.userName);editTextUserPass = findViewById(R.id.userPass);buttonLogin = findViewById(R.id.buttonLogin);/*** 当登录按钮被单击时进入,当 账号 、秘密 不为空时,保存数据*/buttonLogin.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String userName = editTextUserName.getText().toString();String userPass = editTextUserPass.getText().toString();if (userName == null || "".equals(userName)) {Toast.makeText(context, "账号不能为空", LENGTH_SHORT).show();return;}if (userPass == null || "".equals(userPass)) {Toast.makeText(context, "秘密不能为空", LENGTH_SHORT).show();return;}sharedHelper.saveUserData(userName, userPass);}});}
}

Android 数据存储/访问 之 SharedPreferences(偏好设定)相关推荐

  1. Android数据存储(1):SharedPreferences

    Android系统提供了5种方式用来存储应用数据(application data),它们分别是SharedPreferences(共享参数),Internal Storage(内部存储),Exter ...

  2. < Android数据存储> 任务二 应用程序数据文件夹里的文件读写

    :zh]Android中提供了两个方法用来打开应用程序的数据文件夹IO流. 1.FileInputStream openFileInput(String name):参数name表示某个文件名,该方法 ...

  3. 5 Android数据存储 任务二 应用程序数据文件夹里的文件读写 ,

    Android中提供了两个方法用来打开应用程序的数据文件夹IO流. 1.FileInputStream openFileInput(String name):参数name表示某个文件名,该方法用于打开 ...

  4. android+默认存储,Android 数据存储之SP存储,内部存储,外部存储

    Android 数据存储之SP存储,内部存储,外部存储 Android提供了多种数据存储的技术来永久的保存应用数据,以便于开发者能够根据自己的需求来选择合适的数据存储方案,主要有SharedPrefe ...

  5. Android数据存储安全实践

    0x00 数据安全 Android操作系统自问世以来凭借其开放性和易用性成为当前智能手机的主流操作系统之一,作为与人们关系最密切的智能设备,越来越多的通讯录.短信.视频等隐私数据以明文的方式保存在手机 ...

  6. Android数据存储几种方式用法总结

    Android数据存储几种方式用法总结 1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存 ...

  7. Android 数据存储

    参考文章 Android 数据存储-外部存储(SD卡) Android_数据存储_File API Guides 概述 Android 提供了多种选项来保存永久性应用数据,这一过程也有叫做是数据的持久 ...

  8. Android数据存储:Shared Preferences

    Android数据存储之SharedPreferences 在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上, Android 为数据存储提供了如下几种方式: ...

  9. 【Android数据存储】ContentProvider详细介绍(附实例源码)

    1.ContentProvider是什么? ContentProvider--内容提供者.它是一个类,这个类主要是对Android系统中进行共享的数据进行包装,并提供了一组统一的访问接口供其他程序调用 ...

  10. Android数据存储和读取的三种方法

    Android数据存储和读取的三种方法 一.文件存储 二.Context存储 三.SharedPreferences存储 一.文件存储 1.利用文件进行数据的存储 public static bool ...

最新文章

  1. js如何改变HTML属性,javascript – 如何动态设置HTML lang属性?
  2. Winform中使用zxing和Graphics实现自定义绘制二维码布局
  3. 2-2 工程源码文件结构
  4. leetcode-242-有效的字母异位词
  5. 《STL源码剖析常见面试问题》
  6. 探索感染了COVID-19的动物的数据
  7. 光源时间_缩短背光源的使用寿命的原因
  8. 如何制作一条网线?(双绞线在水晶头中的排列顺序)
  9. Flutter与JS的双向调用、Flutter中Widget与Html混合加载
  10. PostgreSQL 荣获 2019 年 O'Reilly 终身成就奖
  11. Tendermint推出2000万美元风投基金,促进Cosmos发展
  12. Mybatis原理解析(一)解析全局xml配置文件生成SqlSessionFactory过程
  13. linux环境下cmake安装及使用
  14. 钉钉小程序踩坑:(与微信小程序的区别)
  15. 实验五 IP协议分析实验
  16. ElasticSearch的REST APIs 之 索引的状态管理
  17. java 迪杰斯特拉_JAVA实现最短距离算法之迪杰斯特拉算法
  18. ARM Cortex-A 系列处理器天梯图
  19. 坑爹的HTML5应用集锦
  20. 廊坊金彩教育:关键词有什么技巧

热门文章

  1. 启用IIS6的GZIP功能,提高网站打开速度,减少带宽占用【转】
  2. VC编程-预编译头文件(precompiled header)
  3. 拓端tecdat:R语言贝叶斯广义线性混合效应(多层次/水平/嵌套)模型GLMM、逻辑回归分析教育留级影响因素数据
  4. 拓端tecdat|基于模型的聚类和R语言中的高斯混合模型
  5. java map的key和value_Java Map集合按照key和value排序之法
  6. 安装卸载gitlab
  7. Python中的极端梯度增强(XGBoost)集成
  8. python实现arxiv论文数据解析处理
  9. error LNK2038 RuntimeLibrary 不匹配的解决
  10. 贝尔英才学院计算机,特稿 | 从高三的二模倒数第一到考取南京邮电大学贝尔英才学院,他仅用了半年!...