Android(安卓)Studio数据永久保存——SharedPreferences
16lz
2021-01-26
数据永久保存——SharedPreferences
- 关于数据存储:
- 关于SharenPreferences
- 外部类访问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(),将常量存放在资源中,使程序维护性更高。
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- 一句话锁定MySQL数据占用元凶
- 使用ContentProvider(内容提供者)共享数据
- Android数据库(SQLite)的简单使用——增、删、查改功能的简单实现
- Ionic Cordova实现软键盘的监听 以及操作大全
- ListView的Adapter使用(绑定数据) 之 自定义每一项的布局去绑定
- Android(安卓)SQLite数据库使用INTO子句创建新表时报错
- Android(安卓)中能够作为 Log 开关的一些操作以及安全性浅谈
- Andriod Service