Android入门之使用SharedPreference存取信息详解

作者:TGITCIC 时间:2023-09-09 10:25:53 

简介

上一篇我们介绍了在android里如何读写本地文件。我们有一种场景,类似网页的cookie,要把用户的一些储如上一次登录、使用的痕迹等信息保存下来以便于每次不需要做重复“填表单”的操作,当在这种场景下我们如果也使用本地文件读写的话显然是“太重”了。因此android提供了一种轻量级存储叫SharedPreference专门用来存储这种场景下的数据。

SharedPreference原理

比如下面这样的一个登录界面,我们把用户登录成功后的信息保存在SharedPreference中,这样用户下次打开手机那么相应的登录过的信息就可以直接自动填充就可以了。这种场景我们就是使用的SharedPreference来做存储的。

Android入门之使用SharedPreference存取信息详解

SharedPreference的存储

SharedPreference一旦生成后,我们使用Android Studio里的device file explorer

Android入门之使用SharedPreference存取信息详解

我们可以在data\data\应用实例全package路径里的\shared_prefs文件夹下可以看到我们生成的shared preference的.xml文件。

打开这个文件我们看到了什么?

Android入门之使用SharedPreference存取信息详解

后端代码

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显示;

Android入门之使用SharedPreference存取信息详解

Android入门之使用SharedPreference存取信息详解

很简单吧,自己动一下手试试吧。

来源:https://blog.csdn.net/lifetragedy/article/details/128369081

标签:Android,SharedPreference
0
投稿

猜你喜欢

  • Java实现FTP上传与下载功能

    2021-09-22 18:28:51
  • spring boot thymeleaf 图片上传web项目根目录操作步骤

    2023-11-23 10:50:46
  • Android图片处理:识别图像方向并显示实例教程

    2023-02-11 08:01:07
  • java入门概念个人理解之package与import浅析

    2021-07-09 10:18:55
  • Flutter路由传递参数及解析实现

    2023-06-22 11:48:45
  • java实现MD5加密的方法小结

    2022-02-26 20:01:47
  • Android11文件管理权限申请详细介绍

    2023-08-28 17:41:47
  • Android之PreferenceActivity应用详解

    2023-03-28 14:26:37
  • 浅谈Android ANR的信息收集过程

    2023-12-02 00:54:00
  • c# 委托的常见用法

    2021-08-11 13:44:05
  • Unity中的静态批处理和动态批处理操作

    2022-09-29 20:12:08
  • SpringBoot2 Jpa 批量删除功能的实现

    2023-06-18 04:54:35
  • 详解java IO流之缓冲流的使用

    2023-08-08 18:33:16
  • 基于OpenCv与JVM实现加载保存图像功能(JAVA 图像处理)

    2021-12-27 23:09:33
  • C#实现保存文件时重名自动生成新文件的方法

    2022-07-02 15:01:57
  • java 数据结构单链表的实现

    2022-07-24 09:45:33
  • mybatis-plus QueryWrapper 添加limit方式

    2022-12-09 02:08:11
  • Android实战APP启动速度优化

    2023-03-21 15:34:18
  • SpringBoot请求处理之常用参数注解介绍与源码分析

    2023-11-10 10:38:12
  • C#获取本机IP地址(ipv4)

    2021-08-29 19:22:06
  • asp之家 软件编程 m.aspxhome.com