Android入门之使用SharedPreference存取信息详解
作者:TGITCIC 发布时间:2023-09-09 10:25:53
简介
上一篇我们介绍了在android里如何读写本地文件。我们有一种场景,类似网页的cookie,要把用户的一些储如上一次登录、使用的痕迹等信息保存下来以便于每次不需要做重复“填表单”的操作,当在这种场景下我们如果也使用本地文件读写的话显然是“太重”了。因此android提供了一种轻量级存储叫SharedPreference专门用来存储这种场景下的数据。
SharedPreference原理
比如下面这样的一个登录界面,我们把用户登录成功后的信息保存在SharedPreference中,这样用户下次打开手机那么相应的登录过的信息就可以直接自动填充就可以了。这种场景我们就是使用的SharedPreference来做存储的。
SharedPreference的存储
SharedPreference一旦生成后,我们使用Android Studio里的device file explorer
我们可以在data\data\应用实例全package路径里的\shared_prefs文件夹下可以看到我们生成的shared preference的.xml文件。
打开这个文件我们看到了什么?
后端代码
SharedPreferenceHelper.java
package org.mk.android.demo;
import android.content.Context;
import android.content.SharedPreferences;
import android.widget.Toast;
import java.util.HashMap;
import java.util.Map;
public class SharedPreferenceHelper {
private final static String SP_TAG="demosp";
private Context mContext;
public SharedPreferenceHelper() {
}
public SharedPreferenceHelper(Context mContext) {
this.mContext = mContext;
}
//定义一个保存数据的方法
public void save(String loginId, String password) {
SharedPreferences sp = mContext.getSharedPreferences(SP_TAG, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("loginId", loginId);
editor.putString("password", password);
editor.commit();
Toast.makeText(mContext, "信息已写入SharedPreference["+SP_TAG+"]中", Toast.LENGTH_SHORT).show();
}
//定义一个读取SP文件的方法
public Map<String, String> read() {
Map<String, String> data = new HashMap<String, String>();
SharedPreferences sp = mContext.getSharedPreferences(SP_TAG, Context.MODE_PRIVATE);
data.put("loginId", sp.getString("loginId", ""));
data.put("password", sp.getString("password", ""));
return data;
}
}
HomePage.java
package org.mk.android.demo;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.util.Map;
public class HomePage extends AppCompatActivity {
private SharedPreferenceHelper spHelper;
private Context ctx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_page);
Button buttonBack=(Button)findViewById(R.id.buttonBack);
buttonBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
@Override
protected void onStart() {
super.onStart();
ctx = getApplicationContext();
spHelper = new SharedPreferenceHelper(ctx);
Map<String, String> data = spHelper.read();
Toast.makeText(ctx, "从SharedPreference中读到信息LoginId->" + data.get("loginId") + " password->" + data.get("password"), Toast.LENGTH_SHORT).show();
}
}
MainActivity.java
package org.mk.android.demo;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private EditText editLoginId;
private EditText editPassword;
private Button buttonLogin;
private String strLoginId;
private String strPassword;
private SharedPreferenceHelper spHelper;
private Context ctx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ctx = getApplicationContext();
spHelper = new SharedPreferenceHelper(ctx);
bindView();
}
private void bindView(){
editLoginId = (EditText)findViewById(R.id.editLoginid);
editPassword = (EditText)findViewById(R.id.editPassword);
buttonLogin = (Button)findViewById(R.id.buttonLogin);
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
strLoginId=editLoginId.getText().toString();
strPassword=editPassword.getText().toString();
spHelper.save(strLoginId,strPassword);
Intent homeIt = new Intent(MainActivity.this, HomePage.class);
startActivity(homeIt);
}
});
}
@Override
protected void onStart() {
super.onStart();
ctx = getApplicationContext();
spHelper = new SharedPreferenceHelper(ctx);
Map<String, String> data = spHelper.read();
Toast.makeText(ctx, "从SharedPreference中读到信息LoginId->" + data.get("loginId") + " password->" + data.get("password"), Toast.LENGTH_SHORT).show();
}
}
核心代码导读:
1.当我们点击了登录按钮后,我们把当前用户的登录信息通过SharedPreferenceHelper保存进demo_sp.xml这个SharedPreference文件中去;
2.当我们每次切换到activity_main主界面时,在onStart中触发读取上次保存进SharedPreference中的内容并以Toast显示;
很简单吧,自己动一下手试试吧。
来源:https://blog.csdn.net/lifetragedy/article/details/128369081
猜你喜欢
- 前言这几天看《Java并发编程之美》的时候又遇到了ThradLocal这个类,不得不说,这个类在平时很多场景都遇得到,所以对其进行一个系统性
- 写在前面在前后端交互过程中,为了保证信息安全,我们往往需要加点用户验证。本文介绍了用springboot简单整合token。springbo
- 本文实例讲述了Java实现的校验银行卡功能。分享给大家供大家参考,具体如下:步骤:首先区分借记卡和信用卡,然后就是校验卡号,最后根据银联Bi
- 好几天没有跟进Spring MVC的学习了,之前看了点源码都忘的差不多了。这次就跟着之前的问题,继续总结下Spring MVC中的小知识。u
- 1.生成自己的注解(为了确定在哪些位置使用)/** * 关闭patch delete的model处理,否则会报错 */@Target({El
- 这里记录Java中从控制台读入信息的几种方式,已备后查!(1)JDK 1.4(JDK 1.5和JDK 1.6也都兼容这种方法)public
- 1. broker 清理文件介绍本系列RocketMQ4.8注释github地址,希望对大家有所帮助,要是觉得可以的话麻烦给点一下Star哈
- springBoot所有依赖和配置文件都写好的情况下1、dao接口的实现方法package com.cy.pj.sys.dao;import
- 在文件夹中,我们经常有类似s_1.txt、s_2.txt、s_10.txt、s_11.txt这样的命名方式,我们期望的排序方式是s_1.tx
- 本节作为主要讲解Spring Data的环境搭建JPA Spring Data :致力于减少数据访问层(DAO)的开发量。开发者唯一要做的就
- 一、简介  本文今天主要是讲Redis中对过期key的监听,可能很多小伙伴不会,或者使用会出现一些不可思
- SpringCloud简介Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的微
- 开篇JDBC类型与Java类型并不是完全一一对应的。所以在PreparedStatement绑定参数的时候需要把Java类型转为JDBC类型
- Android音乐播放器的运行效果这篇博客还是接着上一篇Android音乐播放器制作写的,没看过的可以去看看。其中这个效果(圆形ImageV
- 目录前言connectTimeout:callTimeout:pingIntervalwriteTimeoutreadTimeout总结前言
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe
- 早期的项目比较简单,多是用JSP 、Servlet + JDBC 直接搞定,后来使用 Struts1(Struts2)+Spring+Hib
- Java枚举类使用Lombok枚举类是一个特殊的常量类,由于其特殊的设计,具有简洁性、安全性以及便捷性,在开发中被普遍使用。本文简单介绍一下
- File 类:文件和目录路径名的抽象表示。注意:File 类只能操作文件的属性,文件的内容是不能操作的。1、File 类的字段我们知道,各个
- 为什么需要ThreadLocalRandomjava.util.Random一直都是使用比较广泛的随机数生成工具类,而且java.lang.