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


猜你喜欢
- 本章目标整合 Mybatis ,并集成 Druid 数据源可视化监控 Druid 数据源使用 JPA 生成数据表利用注解实现数据库的事物利用
- 1.vs中生成dll对应的生成dll的cpp如下 #include<opencv2/opencv.hpp>#inclu
- 引言目前很多系统为了解决数据读写的性能瓶颈,在系统架构设计中使用Redis实现缓存,Spring框架为了让开发人员更加方便快捷的使用Redi
- 上篇并发编程之Java内存模型volatile的内存语义介绍了volatile的内存语义,本文讲述的是final的内存语义,相比之下,fin
- 微信公众号,仿照企业号的思路,增加了标签管理的功能,对关注的粉丝可以设置标签管理,实现更加方便的分组管理功能。开发者可以使用用户标签管理的相
- 单点登录(SSO):SSO是指在多个应用系统中个,用户只需要登陆一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应
- Android自定义View仿探探卡片滑动这种效果网上有很多人已经讲解了实现思路,大多都用的是RecyclerView来实现的,但是我们今天
- 如下所示:import java.util.ArrayList;import com.heima.bean.Person;public cl
- 这里设计一个自定义View,继承了ScrollView,实现可以下拉里面的内容,松手后画面弹回,这个自定义的View可以当做ScrollVi
- 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....程序设计:public class exp2{ publi
- 持久化类Hibernate的整个概念是采取从Java类属性的值,并将持久到数据库表。一个映射文件Hibernate的帮助确定如何从拉动类的值
- 回想一下MyBatis的基本操作,它需要实体类,自定义mapper接口以及mapper.xml配置文件。为了避免繁琐的工作量,MyBatis
- 前言在Java 8之前,默认情况下,接口中的所有方法都是公共的和抽象的。但是这一限制在Java 8中被打破了,Java 8允许开发人员在接口
- 参考:How to catch an Exception from a threadIs there a way to make Runna
- 本文实例讲述了Android继承ViewGroup实现Scroll滑动效果的方法。分享给大家供大家参考,具体如下:extends ViewG
- 若一个实例方法声明前带有virtual关键字,那么这个方法就是虚方法。虚方法与非虚方法的最大不同是,虚方法的实现可以由派生类所取代,这种取代
- 如论实施敏捷的团队,或者实施 DevOps 的团队,通过自动化测试提高测试效率和软件质量都是其共同的选择。UI 自动化测试是自动化化测试当中
- 效果展示单选版可看上篇博文 用flutter封装一个点击菜单工具栏组件本文是CHeckbox多选版效果如图所示,点击选项回调选中的
- 1、任何的高并发,请求总是会有一个顺序的2、java的队列的数据结构是先进先出的取值顺序3、BlockingQueue类(线程安全)(使用方
- 本文实例讲述了C#实现的WINDOWS登录功能。分享给大家供大家参考,具体如下:using System;using System.Data