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. 上篇: php 微信公众号 基于Thinkphp3.2框架开发

    说明:本教程是自己自学+自己的理解+扩展(包括学习过程中遇到的一些问题) 参考教程:麦子学院--李忠益--http://www.maiziedu.com/u/70409/ 微盟: http://www ...

  2. AtCoder agc007_d Shik and Game

    洛谷题目页面传送门 & AtCoder题目页面传送门 有\(1\)根数轴,Shik初始在位置\(0\).数轴上有\(n\)只小熊,第\(i\)只在位置\(a_i\).Shik每秒可以向左移动\ ...

  3. Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)

    日期:2020.01.16 博客期:125 星期四 我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式: <?xml version=&quo ...

  4. python对文件中光标的操作迭代器

    seek()    默认从文件开头开始.seek(10) seek(10,1)   需要以b的模式读取文件,从相对位置进行移动光标 seek(-3,2)  倒着移动光标的模式 例如: f= open( ...

  5. 暑假周进度报告(三)-------版本过高后续问题处理,eclipse编译运行MapReduce以及Hadoop学习

    问题一:Hadoop版本太高 卸载Hadoop3.2.0 我改安装了Hadoop 2.7.7 如果没有权限下载.可以采用如下方式: 卸载完成以后返回原目录即可 后面的jdk卸载也可以采用这种方式. 按 ...

  6. Codeforces 1249E By Elevator or Stairs? 题解

    这题其实和 NIKKEI 2019-2-D Shortest Path on a Line 差不多的啦,都是一种最短路的变形,把多个点和边关联了起来. 题面 你要从一楼到 \(n\) 楼去,每层楼可以 ...

  7. OSI参考模型对网络排错的指导

    问题 当我们遇到网络故障的时候,比如连不上网.打开浏览器无法正常访问等问题的时候,我们应该怎么排查呢? 我们首先想到的是物理层,因为在OSI参考模型中物理层是在最低端.最基础. 物理层排查 主要查看连 ...

  8. Zabbix在Docker中的应用和监控

    目录 Zabbix在Docker中的应用和监控 一.如何使Zabbix跑在Docker里 1.Docker基础环境配置 2.Docker-compose安装配置 3.启动zabbix server 4 ...

  9. HTML多条件筛选商品

    今天同事接到一个类似于JD的按条件筛选商品的功能,同事把这个锅出色的甩给了我,俺就勉为其难的解决了这个问题. 首先我们来理清一下思路: 1.条件切换时,tab选项卡肯定要跟着切换,而且只是一个大类条件 ...

  10. jquery获取select选中的文本值

    误区: 一直以为jquery获取select中option被选中的文本值,是这样写的:   $("#id").text();  //获取所有option的文本值 实际上应该这样: ...