Android Studio SharedPreferences
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的更多相关文章
- Android Studio快速集成讯飞SDK实现文字朗读功能
今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即“从文本到语音” ...
- Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记
以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...
- Android Studio 多个编译环境配置 多渠道打包 APK输出配置
看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...
- Android Studio —— 重装 HAXM
Android Studio -- 重装 HAXM 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. Android SDK 自带模拟器一直以慢.卡 ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...
- 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值
一.写在前面 现在越来越多的API接口要求都要求提供我们的项目SHA1值,开发版目前还要求不高,但是发布版是必定要求的.而目前定位在各大APP中也较为常见,当下主流的百度地图和高德地图都在申请的时候会 ...
- 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案
相信很多小伙伴都在android开发中遇到调用jni的各种巨坑,因为我们不得不在很多地方用到第三方库so文件,然而第三方官方通常都只会给出ADT环境下的集成方式,而谷歌亲儿子android studi ...
- android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!
android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...
随机推荐
- Linux/CentOS环境下如何安装和配置PhantomJS工作环境
PhantomJS 是一个基于WebKit的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, C ...
- ws2_32.dll的妙用与删除 (禁网)
ws2_32.dll是Windows Sockets应用程序接口,用于支持Internet和网络应用程序.程序运行时会自动调用ws2_32.dll文件,ws2_32.dll是个动态链接库文件位于系统文 ...
- 如何优雅的写好python代码?
Python与其他语言(比如 java或者 C ++ )相比有较大的区别,其中最大的特点就是非常简洁,如果按照其他语言的思路老师写Python代码,则会使得代码繁琐复杂,并且容易出现bug,在Pyth ...
- 为什么阿里Java规约要求谨慎使用SimpleDateFormat
前言 在阿里Java开发规约中,有强制性的提到SimpleDateFormat 是线程不安全的类 ,在使用的时候应当注意线程安全问题,如下: 其实之前已经介绍过使用JDK1.8的DateTimeFor ...
- Intellij Idea webstorm 激活
参考: 最新破解 https://www.cnblogs.com/litterCoder/p/12175461.html 推荐 https://mp.weixin.qq.com/s/zxfDAlN8G ...
- JS之如何将Promise.then的值直接return出来
不可能直接将Promise.then的值直接return出来,只能return出Promise对象,然后继续.then去操作异步请求得到的值.
- main.js index.html与app.vue三者关系详解
main.js index.html与app.vue三者关系详解 2019年01月23日 11:12:15 Pecodo 阅读数 186 main.js与index.html是nodejs的项目启 ...
- osgb的顶点,纹理,索引,UV读取与存储
virtual void apply(osg::Geode& node) { ; i < node.getNumDrawables(); i++) { osg::Geometry* ge ...
- 嵊州普及Day5T2
题意:将(w,h)的纸条折成(W,H),最少需几步. 思路:横竖互不干扰,然后最多可折int型一半,拿个函数判断两次比较即可,然后折不了的条件是需要的矩形大于给的矩形. 见代码: #include&l ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 图片
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...