Android入门第51天-使用Android的SharedPreference存取信息

Posted TGITCIC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android入门第51天-使用Android的SharedPreference存取信息相关的知识,希望对你有一定的参考价值。

简介

上一篇我们介绍了在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入门第51天-使用Android的SharedPreference存取信息的主要内容,如果未能解决你的问题,请参考以下文章

Android入门第17天-Android里的ProgressBar的使用

Android入门第18天-Android里的SeekBar的使用

Android入门第16天-Android里的SwitchButton的使用

Android入门第30天-Android里的Toast的使用

Android入门第34天-Android的Menu组件使用大全

Android入门第25天-Android里使用SimpleAdapter实现复杂的界面布局