Android Studio数据永久保存——SharedPreferences
2020-04-23 09:16
1401 查看
数据永久保存——SharedPreferences
本文为学习类文档,通过学习B站up主longway777的视频,如有侵权,请联系博主进行删除
关于数据存储:
关于数据存储,从前的Android提供了四种不同的存储方式分别为:
- 内部存储Internal file storage:APP沙盒内部存储,外部无法访问。
- 外部存储External file storage:允许外部访问,类似数据线连接对应的部分访问操作。
越狱或者root之后,就没有内外部存储一说,代价为牺牲app文件私密性 - Shared Preferences:也属于一种内部存储,但只允许存储简单数据(int、float、bool、string等),将私有的原始数据以键-值对存储。
- 数据库Databases:Android支持SQLite数据库,可将数据存储在一个私有的数据库中。
但是今天从文档想要查看官方给的解释时!文档又又又改了!date:2020年4月6日查看
机翻:
-
APP特定存储:存储仅供应用程序使用的文件,可以存储在内部存储卷中的专用目录中,也可以存储在外部存储卷中的不同专用目录中。使用内部存储的目录来保存其他应用程序不应该访问的敏感信息。
-
共享存储:存储应用程序打算与其他应用程序共享的文件,包括媒体、文档和其他文件。
-
ferences:将私有的原始数据存储在键-值对中。
-
数据库:使用Room persistence库将结构化数据存储在私有数据库中。
由此看来Preferences应该还是和之前的SharedPreferences一样,只不过重命名了而已。,所以下面还是以SharedPreferences来复习
关于SharenPreferences
查看Device File Explorer(位于as的右下角处)
路径:Data->data->package名->
通过写一个数据来查看数据存储情况
- 新建一个项目
- 在项目中的controller填写代码
使用SharedPreferences的getPreferences()方法:
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE); //新版as已经删除了Context.MODE_WORLD_READABLE,Context.MODE_WORLD_WRITEABLE SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt("NUMBER",100);//文件中会被写进一个KEY为100的数据 //editor.commit();//提交 editor.apply();//提交,建议使用apply(),其使用的是非同步方式提交操作,可避免冲突
- 运行项目后查看文件系统,可看到多出来一个文件夹,里面还有包含数据的xml文件(没有看到的在包名处右键刷新Synchronize即可):
打开MainActivity.xml可以看到数据:
- 读取情况(将数据用Logcat查看):
//数据读取 int x = sharedPreferences.getInt("NUMBER",0);//两个参数,要给出缺省值,如果为空赋值0 String TAG = "myLog"; Log.d(TAG, "onCreate: " + x); //可在Logcat中搜索myLog查看读取到的数据
5. 使用getSharedPreferences()效果一致,以自命名的数据库文件存入相应数据:
SharedPreferences sharedPreferences = getSharedPreferences("MY_DATA",Context.MODE_PRIVATE);//两个参数,一是名称,二是MODE SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt("NUMBER",600);//文件中会被写进一个KEY为600的数据 editor.apply();//提交,建议使用apply(),其使用的是非同步方式提交操作,可避免冲突 //数据读取 int x = sharedPreferences.getInt("NUMBER",0);//两个参数,要给出缺省值,如果为空赋值0 String TAG = "myLog"; Log.d(TAG, "onCreate: " + x); //可在Logcat中搜索myLog查看读取到的数据
外部类访问SharedPreferences的数据的操作:
- 创建一个Model,命名为MyData.class。
- 在类中填写代码:
package com.example.sharedpreferences; import android.content.Context; import android.content.SharedPreferences; public class MyData { public int number; //定义一个域类型为Context,用以实现访问SharedPreferences private Context context; //通过构造函数传递 public MyData(Context context){ this.context = context; } public void save(){ //SharedPreferences sharedPreferences = context.getSharedPreferences("MY_DATA",Context.MODE_PRIVATE); //"MY_DATA"存在hard coded的警告隐患 //在resource中创建strins资源较为合适 String name = context.getResources().getString(R.string.MY_DATA);//在Activity外部无法直接getString(); SharedPreferences sharedPreferences = context.getSharedPreferences(name,Context.MODE_PRIVATE); //写操作 SharedPreferences.Editor editor = sharedPreferences.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);//在Activity外部无法直接getString(); SharedPreferences sharedPreferences = context.getSharedPreferences(name,Context.MODE_PRIVATE); String key = context.getResources().getString(R.string.MY_KEY); int x = sharedPreferences.getInt(key,context.getResources().getInteger(R.integer.defValue)); number = x; return x; } }
- 在controller中onCreate()中补充:
MyData myData = new MyData(getApplicationContext());//ApplicationContext可理解为指向APP的顶级引用,较为安全 myData.number = 1000; myData.save(); int y = myData.load(); String TAG = "myLog"; Log.d(TAG, "onCreate: " + y); //可在Logcat中搜索myLog查看读取到的数据
- 运行项目查看logcat与数据库文件中的保存数据:
小结
在controller中对数据不进行操作,全部放在My_Data类中,由于是外部引用所以需要传递过来,在其中创建有参(context类型)构造函数,使其具备访问全局资源的能力。定义两个方法save()与load(),将常量存放在资源中,使程序维护性更高。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Android Studio中获取查看签名SHA1证书指纹数据或MD5的方法
- [iOS]数据永久保存(KeyChain)
- Android studio上面学习Aidl实现复杂数据类型的传递
- Android studio中DDMS无法查看data数据问题
- Android系列之SQLite与Android Studio的数据交互
- Android Studio 绑定下拉框数据(网络JSON数据)
- 解决android studio和tomcat之间数据交互乱码问题
- Android Studio 的 自动数据绑定工具DataBindingUtil [对象]Binding 简单使用原理!
- Android studio 输入的数据在页面间传输
- Android Studio Intent向上下活动传递数据 第一行代码
- Android Studio中获取sha1证书指纹数据的方法
- android studio中OkHttp请求数据
- Android studio 中对数据层框架greeDao的使用
- Android Studio中使用volley请求数据后返回数据显示乱码的问题
- Android Studio 获取网络JSON数据并处理
- Android Studio绑定下拉框数据详解
- android studio 从local.properties文件中读取配置数据
- Android studio请求网络数据ListView异步加载展示文字条目 ImageLoadler加载图片
- Android 实现永久保存数据的方法详解
- Android studio之向下一个活动传递数据与返回