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

目录
  • 简介
  • SharedPreference原理
  • SharedPreference的存储
  • 后端代码
    • SharedPreferenceHelper.java
    • HomePage.java
    • MainActivity.java

简介

上一篇我们介绍了在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显示;

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

以上就是Android入门之使用SharedPreference存取信息详解的详细内容,更多关于Android SharedPreference存取信息的资料请关注我们其它相关文章!

(0)

相关推荐

  • Android SharedPreferences存取操作以及封装详解

    存 首先初始化 private SP sp; sp = new SP( context ); 存入数据 第一个参数为上下文,第二个参数为key,第三个参数为要存入的数据Value sp.PutData( context,"AccessToken",AccessToken ); 取 初始化 private SP sp; sp = new SP( context ); 取出数据 第一个参数为上下文,第二个参数为存入数据时定义的名称,第三个数据为取出数据的默认类型(这个参数很关键,再封装类转

  • Android使用SharedPreferences存储数据的实现方法

    本文实例讲述了Android使用SharedPreferences存储数据的实现方法.分享给大家供大家参考,具体如下: 编辑短信的时候,突然接收到电话,通过这种方式可以保存之前已经编辑好的短信内容 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 用只读模式打开/data/data/包名/

  • Android SharedPreferences存储的正确写法

    SharedPreferences 特点 即便是Android小白都知道的SharedPreferences的用法,这是保存数据最简便的方法,但是不处理好的话后期维护将是一个巨大的坑.那么该如何处理好SharedPreferences才方便维护呢.先从它的特点开始入手吧. 通过Context.getSharedPreferences()获取的SharedPreferences是一个单例 SharedPreferences.edit()每次都会创建一个新的编辑对象,commit()之前一切改动都无

  • android文件存储和SharedPreferences存储的项目实例

    该实例为课程作业,请尊重劳动成果. 演示 [文件存储]中查看设备保存的文件 目录 activity_main <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/re

  • Android SharedPreferences存储用法详解

    先看Demo运行效果 SharedPreferences详解 SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity状态,Activity暂停时,将此activity的状态保存到SharedPereferences中:当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出. SharedPreferences提供了java常规的Long.Int.Strin

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

    目录 简介 SharedPreference原理 SharedPreference的存储 后端代码 SharedPreferenceHelper.java HomePage.java MainActivity.java 简介 上一篇我们介绍了在android里如何读写本地文件.我们有一种场景,类似网页的cookie,要把用户的一些储如上一次登录.使用的痕迹等信息保存下来以便于每次不需要做重复“填表单”的操作,当在这种场景下我们如果也使用本地文件读写的话显然是“太重”了.因此android提供了一

  • Android入门之Activity间互相传值详解

    目录 介绍 Android中的传值 课程目标 全代码 前端 后端代码 附.工程结构 介绍 今天的课程会比较好玩,我们在之前的Service篇章中看到了一种putExtras和getExtras来进行activity与service间的传值.而恰恰这种传值其实也是Android里的通用传值法.它同样可以适用在activity与activity间传值. Android中的传值 传单个值 传多个值 具体我们来结合例子来看吧 课程目标 正向传值到下一个activity上 反向传值到调用activity上

  • Android入门之Handler的使用教程详解

    目录 简介 项目结构 代码 前端 后端 简介 我们在前面的Android教程中已经提到过这么一件事:Android在启动后会有一个主线程.它不允许任何子线程去改变主UI线程里的内容. 这么做是为了妨止,万一有一个带有大事务的线程导致了渲染组件时间过长最终导致Android UI出现“闪退”.“崩溃”的保护机制. 而实际我们在Android操作里的确是会有一些“耗时”的事情而采用异步线程,如:首页打开时调用第三方地图定位API.调用第三方银行API来显示你的余额.调用第三方社保显示你的当前社保缴纳

  • Android入门之在SharedPreference中使用加密

    目录 简介 课程目标 全代码 activity_main.xml MD5工具类 SharedPreference的helper类 MainActivity.java 运行起来的效果 简介 在上一篇中,我们讲了SharedPreference的使用.但是那不是一个生产场景.特别是我们举了一个例子,存放登录信息的例子.这个例子里用户的密码没有加密,比如说在真实的实际生产环境里用户的一些敏感信息或者说是像:用户四要素按照等保3规范以及“个信”法,都是需要加密和脱敏的.所以当碰到这样的“敏感”信息脱敏需

  • Android 中Crash时如何获取异常信息详解及实例

    Android 中Crash时如何获取异常信息详解 前言: 大家都知道,Android应用不可避免的会发生crash,无论你的程序写的多完美,总是无法完全避免crash的发生,可能是由于Android系统底层的bug,也可能是由于不充分的机型适配或者是糟糕的网络状况.当crash发生时,系统会kill掉你的程序,表现就是闪退或者程序已停止运行,这对用户来说是很不友好的,也是开发者所不愿意看到的,更糟糕的是,当用户发生了crash,开发者却无法得知程序为何crash,即便你想去解决这个crash,

  • Android开发使用HttpURLConnection进行网络编程详解【附源码下载】

    本文实例讲述了Android开发使用HttpURLConnection进行网络编程.分享给大家供大家参考,具体如下: --HttpURLConnection URLConnection已经可以非常方便地与指定站点交换信息,URLConnection下还有一个子类:HttpURLConnection,HttpURLConnection在URLConnection的基础上进行改进,增加了一些用于操作HTTP资源的便捷方法. setRequestMethod(String):设置发送请求的方法 get

  • Android开发使用URLConnection进行网络编程详解

    本文实例讲述了Android开发使用URLConnection进行网络编程.分享给大家供大家参考,具体如下: URL的openConnection()方法将返回一个URLConnection,该对象表示应用程序和URL之间的通信连接,程序可以通过URLConnection实例向该URL发送请求,读取URL引用的资源.通常创建一个和URL的连接,并发送请求,读取此URL引用的资源. 需要如下步骤: a)通过调用URL对象openConnection()方法来创建URLConnection对象 b)

  • Android 拦截返回键事件的实例详解

    Android 拦截返回键事件的实例详解 KeyEvent类 Android.View.KeyEvent类中定义了一系列的常量和方法,用来描述Android中的 按键事件和返回键有关的常量和方法有. KeyEvent.KEYCODE_BACK: 表示key类型为返回键 KeyEvent.ACTION_DOWN:表示事件为按下key,如果一直按住不放,则会不停产生此事件. KeyEvent.ACTION_UP:表示事件为为放开key,一次点击key过程只会调用一次. public final in

  • Android 实现获取手机里面的所有图片详解及实例

    Android 实现获取手机里面的所有图片详解及实例 实现代码: public class MainActivity extends Activity { //查看图片按钮 private Button look; private Button add; //显示图片名称的list ListView show_list; ArrayList names = null; ArrayList descs= null; ArrayList fileNames = null; @Override pro

  • Android OkHttp的简单使用和封装详解

    Android OkHttp的简单使用和封装详解 1,昨天把okHttp仔细的看了一下,以前都是调用同事封装好了的网络框架,直接使用很容易,但自己封装却不是那么简单,还好,今天就来自我救赎一把,就和大家写写从最基础的OKHttp的简单get.post的使用,再到它的封装. 2,OkHttp的简单使用 首先我们创建一个工程,并在布局文件中添加三个控件,TextView(用于展示获取到json后的信息).Button(点击开始请求网络).ProgressBar(网络加载提示框) ①简单的异步Get请

随机推荐