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
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java实现FTP上传与下载功能
![](https://img.aspxhome.com/file/2023/0/62340_0s.jpg)
spring boot thymeleaf 图片上传web项目根目录操作步骤
Android图片处理:识别图像方向并显示实例教程
![](https://img.aspxhome.com/file/2023/0/139150_0s.png)
java入门概念个人理解之package与import浅析
Flutter路由传递参数及解析实现
![](https://img.aspxhome.com/file/2023/5/90155_0s.gif)
java实现MD5加密的方法小结
Android11文件管理权限申请详细介绍
![](https://img.aspxhome.com/file/2023/6/137656_0s.png)
Android之PreferenceActivity应用详解
![](https://img.aspxhome.com/file/2023/9/138199_0s.jpg)
浅谈Android ANR的信息收集过程
c# 委托的常见用法
Unity中的静态批处理和动态批处理操作
SpringBoot2 Jpa 批量删除功能的实现
![](https://img.aspxhome.com/file/2023/7/80907_0s.jpg)
详解java IO流之缓冲流的使用
基于OpenCv与JVM实现加载保存图像功能(JAVA 图像处理)
![](https://img.aspxhome.com/file/2023/2/104062_0s.jpg)
C#实现保存文件时重名自动生成新文件的方法
java 数据结构单链表的实现
mybatis-plus QueryWrapper 添加limit方式
Android实战APP启动速度优化
SpringBoot请求处理之常用参数注解介绍与源码分析
![](https://img.aspxhome.com/file/2023/8/59248_0s.png)