SharePreferences主要用于记录用户的一些偏好设置,比如:用户账号,密码之类的,数据量非常小的数据。
效果如下:
MainActivity.java的代码如下:
package com.deepreality.sharedpreferencesdemo; import android.content.Context; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import java.util.Map; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText etUserName, etPassword; private Button btnLogin; private String strUserName; private String strPassword; private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; bindViews(); } private void bindViews() { etUserName = findViewById(R.id.main_etUserName); etPassword = findViewById(R.id.main_etPassword); btnLogin = findViewById(R.id.main_btnLogin); btnLogin.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.main_btnLogin:{ strUserName = etUserName.getText().toString(); strPassword = etPassword.getText().toString(); //保存用户偏好设置到my_sp.xml文件中 SPUtils.put(mContext, "username", strUserName); SPUtils.put(mContext, "password", strPassword); break; } default:break; } } /** * 当前Activity启动时的操作,在onCreate方法之后 */ @Override protected void onStart() { super.onStart(); //读取本地的用户偏好设置 etUserName.setText(SPUtils.get(mContext, "username", "").toString()); etPassword.setText(SPUtils.get(mContext, "username", "").toString()); } }
下面提供两个工具类:MD5Utils(MD5加密工具类),SPUtils(用户偏好设置工具类)。
MD5Utils.java
package com.deepreality.sharedpreferencesdemo; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class MD5Utils { public static String getMD5(String content) { try { MessageDigest digest = MessageDigest.getInstance("MD5"); digest.update(content.getBytes()); return getHashString(digest); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } private static String getHashString(MessageDigest digest) { StringBuilder builder = new StringBuilder(); for (byte b : digest.digest()) { builder.append(Integer.toHexString((b >> 4) & 0xf)); builder.append(Integer.toHexString(b & 0xf)); } return builder.toString(); } }
SPUtils.java
package com.deepreality.sharedpreferencesdemo; import android.content.Context; import android.content.SharedPreferences; import java.util.Map; public class SPUtils { /** * 保存在手机里的SP文件名 */ public static final String FILE_NAME = "my_sp"; /** * 保存数据 */ public static void put(Context context, String key, Object obj) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); if (obj instanceof Boolean) { editor.putBoolean(key, (Boolean) obj); } else if (obj instanceof Float) { editor.putFloat(key, (Float) obj); } else if (obj instanceof Integer) { editor.putInt(key, (Integer) obj); } else if (obj instanceof Long) { editor.putLong(key, (Long) obj); } else { editor.putString(key, (String) obj); } editor.commit(); } /** * 获取指定数据 */ public static Object get(Context context, String key, Object defaultObj) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, context.MODE_PRIVATE); if (defaultObj instanceof Boolean) { return sp.getBoolean(key, (Boolean) defaultObj); } else if (defaultObj instanceof Float) { return sp.getFloat(key, (Float) defaultObj); } else if (defaultObj instanceof Integer) { return sp.getInt(key, (Integer) defaultObj); } else if (defaultObj instanceof Long) { return sp.getLong(key, (Long) defaultObj); } else if (defaultObj instanceof String) { return sp.getString(key, (String) defaultObj); } return null; } /** * 删除指定数据 */ public static void remove(Context context, String key) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.remove(key); editor.commit(); } /** * 返回所有键值对 */ public static Map<String, ?> getAll(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, context.MODE_PRIVATE); Map<String, ?> map = sp.getAll(); return map; } /** * 删除所有数据 */ public static void clear(Context context) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, context.MODE_PRIVATE); SharedPreferences.Editor editor = sp.edit(); editor.clear(); editor.commit(); } /** * 检查key对应的数据是否存在 */ public static boolean contains(Context context, String key) { SharedPreferences sp = context.getSharedPreferences(FILE_NAME, context.MODE_PRIVATE); return sp.contains(key); } }