Android 中最简单的数据存储方式 : SharedPreferences

SharedPreferences 数据存储处理实际上时对一个个key——value 数据对的处理

使用SharedPreferences 保存key-value 对的一般步骤:

1. 使用Activity 类 的 getSharePreferences方法获取SharePreferences 对象,指定文件名和访问权限

2.获得SharePreferences.Editor 对象,并调用该对象的putXXX 方法保存key-value 对

3. 通过SharePreferences.Editor 的commit 方法提交保存 key-value 对

示例一:

认识并使用

 package com.example.sharedpreferences;

 import androidx.appcompat.app.AppCompatActivity;

 import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //SharedPreferences 接口
// 一个参数
SharedPreferences shp=getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor=shp.edit() ;
editor.putInt("NUMBER",100); // key -value
//均可 提交
//editor.commit();
//非同步提交
editor.apply(); int x =shp.getInt("NUMBER",0);
String TAG="mylog";
Log.d(TAG, "onCreate: "+x); }
}

运行程序之后,找到设备存储位置

打开 Mainactivity .xml  该文件名为默认的

会找到命名为 NUMBER 的 int 类型数据 数值为100

 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<int name="NUMBER" value="100" />
</map>

2.使用 getSharedPreferences  方法

 package com.example.sharedpreferences;

 import androidx.appcompat.app.AppCompatActivity;

 import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //SharedPreferences 接口
//两个参数
SharedPreferences shp = getSharedPreferences("MY_data",Context.MODE_PRIVATE);
// 一个参数
// SharedPreferences shp=getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor=shp.edit() ;
editor.putInt("NUMBER",6 00); // key -value
//均可 提交
//editor.commit();
//非同步提交
editor.apply(); int x =shp.getInt("NUMBER",0);
String TAG="mylog";
Log.d(TAG, "onCreate: "+x); }
}

存储为自定义名称的 xml 文件

2. 创建一个专门的数据类来管理数据

MyData类

 package com.example.sharedpreferences;

 import android.content.Context;
import android.content.SharedPreferences; public class MyData { public int number; private Context context;
public MyData(Context context){
this.context=context;
} public void save(){
String name=context.getResources().getString(R.string.MY_data);
SharedPreferences shp= context.getSharedPreferences(name,Context.MODE_PRIVATE);
SharedPreferences.Editor editor=shp.edit();
String key=context.getResources().getString(R.string.MY_KEY);
editor.putInt(key,number);
editor.apply();
}; public int load(){ //读取
String name=context.getResources().getString(R.string.MY_data);
SharedPreferences shp= context.getSharedPreferences(name,Context.MODE_PRIVATE);
String key=context.getResources().getString(R.string.MY_KEY);
//defValue : 缺省值
int x=shp.getInt(key,context.getResources().getInteger(R.integer.defValue));
number=x;
return x; } }

MainActivity.java

 package com.example.sharedpreferences;

 import androidx.appcompat.app.AppCompatActivity;

 import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 不好 this 表示 activity 的引用 有可能导致内存泄漏 activity 经常被摧毁重建
// MyData myData = new MyData(this);
// ApplicationContext() 可以理解为指向app的顶级引用 单个 永远存在的单例
MyData myData = new MyData(getApplicationContext()); myData.number=1000;
myData.save();
int y=myData.load();
String TAG="mylog";
Log.d(TAG, "onCreate: "+y); //SharedPreferences 接口
//两个参数
/* SharedPreferences shp = getSharedPreferences("MY_data",Context.MODE_PRIVATE);
// 一个参数
// SharedPreferences shp=getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor=shp.edit() ;
editor.putInt("NUMBER",600); // key -value
//均可 提交
//editor.commit();
//非同步提交
editor.apply(); int x =shp.getInt("NUMBER",0);
String TAG="mylog";
Log.d(TAG, "onCreate: "+x);*/ }
}

在编写程序当中,将某些变量设置在Resource 的Values 目录当中,便于数据管理,提高程序的可维护性

string.xml

<resources>
<string name="app_name">SharedPreferences</string>
<string name="MY_data">my_data</string>
<string name="MY_KEY">my_key</string>
</resources>

int.xml

 <?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="defValue">0</integer>
</resources>

Android Studio SharedPreferences的更多相关文章

  1. Android Studio快速集成讯飞SDK实现文字朗读功能

    今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即“从文本到语音” ...

  2. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  3. Android Studio 多个编译环境配置 多渠道打包 APK输出配置

    看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...

  4. Android Studio —— 重装 HAXM

    Android Studio -- 重装 HAXM 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. Android SDK 自带模拟器一直以慢.卡 ...

  5. android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测

    目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...

  6. 使用 Android Studio 检测内存泄漏与解决内存泄漏问题

    本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...

  7. 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值

    一.写在前面 现在越来越多的API接口要求都要求提供我们的项目SHA1值,开发版目前还要求不高,但是发布版是必定要求的.而目前定位在各大APP中也较为常见,当下主流的百度地图和高德地图都在申请的时候会 ...

  8. 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案

    相信很多小伙伴都在android开发中遇到调用jni的各种巨坑,因为我们不得不在很多地方用到第三方库so文件,然而第三方官方通常都只会给出ADT环境下的集成方式,而谷歌亲儿子android studi ...

  9. android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!

    android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...

随机推荐

  1. C语言for循环嵌套示例

    打印九九乘法表 #include <stdio.h> int main() {   int n,i,j; for (i=1;i<=9;i++) printf("%-4d&q ...

  2. 【动画演示】:JS 作用域链不在话下

    作者:Lydia Hallie译者:前端小智来源:dev 点赞再看,养成习惯 本文 GitHub https://github.com/qq44924588... 上已经收录,更多往期高赞文章的分类, ...

  3. 笔记||Python3进阶之读取和写入yaml配置文件

    yaml是专门用来写配置文件的语言,简洁强大,远比JSON格式方便,yaml在python语言中有PyYAML安装包. - 首先需要pip安装:pip install pyyaml - yaml基本语 ...

  4. python中提取位图信息(AttributeError: module 'struct' has no attribute 'unstack')

    前言 今天这篇博文有点意思,它是从一个例子出发,从而体现出在编程中的种种细节和一些知识点的运用.和从前一样,我是人,离成神还有几十万里,所以无可避免的出现不严谨的地方甚至错误,请酌情阅读. 0x00 ...

  5. Java集合--线程安全(CopyOnWrite机制)

    5 Java并发集合 5.1 引言 在前几章中,我们介绍了Java集合的内容,具体包括ArrayList.HashSet.HashMap.ArrayQueue等实现类. 不知道各位有没有发现,上述集合 ...

  6. Pytorch 分割模型构建和训练【直播】2019 年县域农业大脑AI挑战赛---(四)模型构建和网络训练

    对于分割网络,如果当成一个黑箱就是:输入一个3x1024x1024 输出4x1024x1024. 我没有使用二分类,直接使用了四分类. 分类网络使用了SegNet,没有加载预训练模型,参数也是默认初始 ...

  7. 一个前端博主的nginx+php+mysql的环境搭建

    这几天天某的公司给了在下一个需求,让我修改一个后端大佬用PHP写的一个官网,虽然说修改的内容还是很简单,但是毕竟之前还是没接触过PHP,于是开始了漫长的爬坑之旅,话不多说,这次就给大家介绍一下我配置安 ...

  8. springmvc教程(1)

    idea搭建springmvc maven项目 jdk:1.8 maven:Bundled (Maven 3) idea版本: 开始搭建第一个springmvc maven项目 1.点击File-&g ...

  9. DotNetSpeech----文本转wave语音文件

    wav操作引入dll(DotNetSpeech.dll),引入以后需要选中项目中引入的dll,鼠标右键,选择属性,把“嵌入互操作类型”设置为False.不然会提示无法嵌入互操作类型"Spee ...

  10. 物流跟踪 调用快递鸟API

    概要:关于调用快递鸟API,我有几句话想说,有几行代码想写 业务需求:就是做做商城,卖卖东西.然后需要做个物流跟踪的功能 需要获取的信息大概就是这个样子 现在看这个快递怎么这么慢 如何实现? 直接调用 ...