00:00
好,今天呢,我们主要分享的这个数据存储啊,刚才几个同学呢,已经嗯,以各种有特点的方式是吧,有的说的比较详细,有的说呢比较,呃这个这个概述一些啊,哎,这里边呢,我们再简单的给大家去回顾一下,哎,下边呢,你把这个关于数据存储这方面的个内容的话呢,可以再看一看啊,这个回头发给你。呃,关于这个概述的话呢,我们呃主要呢,关心一个事儿,就是数据存储的话呢,哎,我们要知道它的一个位置啊,先以一个图的方式呢,给它展现出来。啊,其中的话呢,我们说有三个。内部文件存储,数据库SP存储,哎,是在我们这个data data下。嗯,然后另外的话呢,在SID卡里边呢,有一个ID卡,就是手机外部文件存储,嗯,这个下边呢,我们又分成两个路径。嗯,然后再加上一个网络存储。啊,这个呢,也是我们从这个,呃,官方这个文档这个层面我们看到的啊,他告诉我们说数据存储呢,有五种方式。
01:02
但实际上我们说了,在面试的时候呢,呃,我们最好呢,就呃别按照他说的这几种方式来了。哎,Storage options就是一共有几种行为,他这呢就给我们提到了有这五种,这也是我们讲安卓基础的时候呢,提到了这五种方式。哎,包括他这个特点和具体的这个情况,你可以点开来具体来去看啊。啊,那我们这儿首先呢,也是先把这五种方式说一下啊,后边呢,我们再说一下这个content provider啊首先呢,关于这个SSP存储这呢,已经写的比较详细了啊,刚才其实你分享的时候呢,也应该有一个。呃,这个这个。这个叫什么几个点哈,就是你要按照什么点去说,其实SSP存储也好,下边也好,上来一上来以后呢,直接就说,我要说这样的几个点,第一个呢是特点,第二个呢是具体,呃如何去实现读,如何实现写,呃然后最后一个呢是注意事项。好,首先呢,我来说第一个点应该这样子啊,就非常的有逻辑性。
02:02
这个特点的话呢,我们之前都总结过哈,存储的数据类型,哎,刚才这个,呃,陈明凯上来说的时候应该说说错了。你说了个是吧,没有说string我记得啊,哎,这个呢,是这样几种类型,这个当时我们讲课的时候呢,给大家说了比较有技巧,数据类型的话呢,我们说常用的有八种基本的,还有最常用的这个额外的一个string的啊,那八种里边不用多说啊呃,八种里边呢,比如说整形的这里边呢,给你提供了,而且还给了两。足够你用啊,Better shot呀,凡是用better shot都能用inlo。好,那这个浮电型浮点型呢,它就给了一个float。啊,那这个基本上也能够满足我们日常的需要。嗯,那布尔类型单独给你了,这个叉型,凡是能用叉的都可以用。啊,词缀本身也有,所以说给的这五种类型,足可以表示我们常用的基本数据类型啊,常用的这个数据类型,所以够用啊。
03:01
啊,那通过刚才这个分析,基本上已经你也能记下来有哪几种啊。啊,建着对的方式存储,既然是建着对,所以我们就知道啊呃,应该会是一个类似于map的结构,那也就意味着啊,我这在这写了啊这个键如果你往这个SSP存储的话,啊,键是不能一样的。啊键一样的话呢,它会属于一个覆盖啊,哎,先前的一个Y6啊,这个是要大家关心的一个问题啊,然后存储的位置随着应用的卸载被删除。然后数据的默认是私有的,像这些都得关心一下啊,哎,默认是私有的,你可以改,比如说呢,我们在哎设置你这个SP存储,通过它呢去调edit edit获取一个edit啊再去往里写这个mode呢,一般我们用的是private mode。啊,你也可以改啊,你要一改的话呢,那就有可能这个就是一个公共的了。啊,比如word一个呃,Right一个什么word word word right就是你可以什么全球都可以写读是吧,表示呢,就是可以被其他的这个应用呢来读写了啊那一般的都是私有的。
04:07
好,那下边呢,就涉及到怎么获取对象,刚才看到了啊,然后呃,获取这个编译器,因为你这是在在写写是要用它的啊,具体往里边写啊,有这个put,你刚才几种类型,这呢就有对应的这个类型对应的方法啊,一定要提交。否则呢,写不出去,呃跟frame的这个提交这块是一样的啊啊,包括这个真正操作测库的时候也是这样啊,不提交这个就不能够保存到这个数据库当中,就是真正的数据库那些里边也是这样啊呃读取的话呢,呃就不用这个edit了,直接SP自己就可以搞定。那这个呢,是一个特别之处啊,过去建设对也是相关的跟那个put啊类似的这样几个方法啊,应用场景啊,刚才呢,陈立凯也说到了,说这个应用场景好像发现就在这个登录的时候用了,哎登录的时候呢,确实可以用。
05:00
啊,其实你这个导航栏导航也是一样啊,那你导航的话呢,只有第一次这个登录这个应用的时候呢,才会出现导航,后边呢就不再出现这个导航了,那你可以记录一下用户之前是不是出现过这个导航。对,也可以用这个存储啊,以及呢,我们其实前面不是讲了activity那些生命周期方法吗?啊,其中有一些比如on save instance,或者我们加了这样的方法,就是你在这个on start on house onto以及on save instance这样方法里边,我们呢,可能会需要临时保存一些数据。啊,方便的用户,呃,从不可见到可见的时候呢,再重新还原,那这些数据呢,如果要持久化,你也可以考虑写在SP里边。啊,也可以考虑SP啊,呃,所以呢,就是呃,这个也可以不用把它说的那么死啊,啊说白了这个SP的它的特点就是存。数据或者再说就存变量的,其他的你像那个内幕呀,外部呀,它是像图片呀,视频呀,影音啊,还是比较大的那个东西啊,它就是存一些数据,不是文件啊。
06:03
嗯,其他需要注意事项就可以连着写啊,这个比较简单,下边啊手机内部存储啊,这我这整理的这个也是花了一些时间啊,特点。这个我们都已经都说过了哈,任何文件都行,存储位置这不用多啰嗦了哈,都应该会,嗯,说只要不超过内部文件存储空间你就可以存,实际上呢,没有大小的一个限制啊,别超了就行,哎,存储的速度呢,比外部存储要快一些,应用卸载,数据销毁,默认也是私有的。啊,然后特别大的文件呢,不适合使用内部存储。啊,如果一开始你这个应用在安装的时候呢,里边就有很多数据,这个数据呢,就不要写在内部了,因为本身呢,谷歌市场对APK的大小是有限制的。啊,之前的话呢,是500啊是50兆啊,一个APK呢,上限是50兆,然后去年我记得啊,然后提交提高成这个100兆,就是你这个APK上传到这个谷歌应用市场上呢,是不可以超过100兆的啊,像玩这个游戏的话呢,它都是需要你再单独的去加载这个游戏包啊,一个G2G这样啊。
07:08
呃,这个保存数据,主理数据啊,内部存储的啊啊这里边刚才也谈到了,就是方式的话呢,有两种算式啊,像这种方式,这是用于读的啊,这是用于写的,这个呢是用于读的。哎,默认的话呢,就是对应的是这个目录下的。啊,所以说呢,这个方式一方式二用哪个都行啊,第一种方式无外乎就是你自己呢,先调一下这个目录,第二个呢,就是默认就在这个目录下。啊,就这么个区别,平时用哪个都行。啊,没有什么,严格说这个效率高,那个效率低指数没有啊。啊,只是说呢,就是这种方式就更更更基本一些啊,啊,你需要关注的就是这个方法呢,是从contest下调的。啊gets there,我们上午呢,其实也用到了。啊,然后呢,这是我们保存数据的一个顺序啊,嗯,名字内容写出,呃,提供一个流,然后呢,输出这个操作,这个流就我们在按Java基础里边都讲过关闭流,哎,读的话呢,这个套路其实一样,哎唯独需要你注意的就是,如果你读的是字符号啊,你需要把这个输入流当中的这个数据呢,还原成字符号,哎,你要么用这种拼接的方式,呃要么呢,就是咱们讲的时候用这种方式。
08:20
这个呢,是不是更好一些啊。哎,避免呢,你之前那个F数组的时候呢,中间那个汉字呢,被挤成两半了。啊,所以呢,使用这个batteryre啊。行,这个呢,就是内部存储没了啊,外部存储呢,也是这么几个点特点,保存读取。啊,就这么几个点,特点的话呢,就是它这里边儿首先明确有两路径。啊,这俩路径呢,还真不太一样。啊,一个呢,是。嗯,他俩的主要区别是什么呀。是不是是否销毁的事啊,对,这是它的一个主要区别啊,哎,这个路径一呢,会随着应用的卸载被呃销毁,这个呢不会。
09:01
啊,其他的这个呢,数据都是公开的啊,存储的文件呢都比较大。嗯,然后呢,类型呢,也没有限制啊,存储的速度呢,它俩都一样啊,都比内部存储呢要稍微慢一些啊,那如果你这个数据是私有的。啊,就是比较重要的啊,然后数据量又不大。啊,又频繁的要访问。啊,那肯定是用内部好一些啊,非这些条件呢啊,就用外部啊。同时操作ID卡需要权限。啊,这也需要一个格外注意的点啊,下边这个保存读取啊,因为呢,你有两个路径,所以对应的这个保存也好,读取也好,也都是有针对这两个路径的不同的方法。啊,这个呢,是针对于手机,呃,这个it卡的路径一。啊,有一个external还是掉了。哎,路径二呢,是通过一二掉。啊,这个下边呢,也是一样啊,需要注意的呢,就是我们往往在操作它或操作它进行读写操作的时候呢。
10:00
对,先判断一下这个ID卡呢,是不是挂载的系统是不是能够读取到这个ID卡。哎,这个呢,你要是还原的话呢,也是一样需要呢,用battery of stream啊还原成内存中的组号。行,这个判断标准其实刚才呢已经说到了。啊,就刚才有这样几个点啊,私有与否。啊,这个访问的频率高不高。嗯,然后呢,就是这个,嗯。还有什么呀?这我就看到你这个重要性与否了啊,然后访问频率高高,然后文件呢大不大,大的话呢,就肯定不能放在内部了。嗯,再一个呢,就是你看这有一些数据啊,要不要随着应用的卸载被删除。啊,像照片啊,音乐文件啊都呃应用一切就别删了,所以呢,我们用路径二嗯啊这些选择点这都讲过啊。嗯,下边的话呢,就是提到这个数据库存储啊,就刚才这个网友讲啊。嗯,特点的话呢,就是主要呢,就是它用来保保存一些结构化的这些数据啊,就数据之间关系呢,更复杂,其实上具体说的话呢,呃,可以是一些变量。
11:10
啊,什么name啊呃,这个这个呃,Date类型的呀,都行啊,当然也可以存储一些像二进制的文件,Blog类型,或者说这个文本文件test类型,最大呢,都可以达到四个G。啊,就是都可以去存储这些数据啊好。嗯。那这是提到一个,这是我们安卓系统内置的一个,呃,数据库啊,这个你别记成别的了。下边呢,就是一些具体的API的一个使用了啊,提到了这样几个类open helper啊,具体这个操作呢,刚才已经讲的挺细致了啊,这个我就不在这详细的去说了,呃,通过它以后的话,我们就能够相当于提供它的一个子类哈,这个子类呢,再去调到调这个readable或者redable,获取一个叠加贝词。Like database,然后使用它来进行自然改查。啊,那具体操作的话呢,可以写具体的这些语句。
12:04
啊,增加改查思后一句也可以呢,调现成的,针对于安卓程序员,我们封装到现成这个方法当中。啊用哪种方式呢都可以啊查询的话呢,还可以用这个啊来去实现没问题。嗯。这里面的哪个更灵活呀,或者你觉得哪个你自己倾向于哪个呀。而我们一般经常写这个是吧,嗯,你像我我自己来讲的话呢,我可能经常写这个啊呃,因为呢,像以前那个写这个circle写的多了啊,因为比较擅长去写一些复杂的SQ语句了,那突然你让我往这里边框框里边去填,感觉还有点别扭。啊,或者说你这里边下面提到啊,你要有多秒的一些连接情况呀,就比较复杂的时候呢,哎,我写个串,这个很很快能写出来,但是你往这填有的时候还不太好填。啊,但是的话呢,就是这个呢,呃,要些搜狗比较弱的哈,他自己可能都自己写一个搜狗句都写不全哈,啊那你这块呢,往里填可能更适合他一些。
13:05
啊,像数据库这块的东西比较多哈,其实大家也发现以后,其实工作中也是一样,就是你比如说感,感觉这个东西比较难,经常看,老是经常忘,那有一个好的方式,你就是把它就整个看透了,你就比如说这个东西的难度呢,可能达到五是吧,你就把它的难度你看到八。看到八的时候呢,八你可能看不太懂,你发过来再看我就懂了。啊,数据库你觉得比较难,那行,你把数据库整个给它整透了,什么那些色库啊,什么那些这个这个再深入一些PL色库啊,看完以后可能那些呢,也没有特别懂,特别熟,翻过来你再看这些发现哟,就是好简单。这种感觉啊,嗯。嗯,行,这呢,具体这个数据库存储刚才讲的比较多了啊,这里边就不再去过多的去说了,呃,网络存储这块的话呢,兼容特点啊,这个服务呢,一直在服务器当中运行的。那除非这个它宕机了,除非发生这个天灾人祸了,然后就挂了是吧,一般情况下都没有问题啊,因为这个服务器它疫情的话,这损失就很大了啊。
14:11
呃,权限得需要,然后呢,呃访问访问网络都需要在分线上中去做,分线上去做怎么做,哎,就涉及到消息机制了。啊,那块呢,回头再分享啊呃,发送一个U化号,我们去连具体的这个服务器啊,通过HTP冒号啊,遵循这样一个协议啊呃,具体这个方式这块的话可以再分一分,呃,首先呢是htpl connection啊,这就是具体的它的一个实现方式,刚才呢,分享的时候也说到了,我这不详细的讲啊,就那会讲有一个话说错了,是响应了是吧。不是请求码啊。响应码分成200啊,404500啊啊。嗯,另外呢,就是使用这个阿帕奇提供的这个叫htp plant啊,这个6.0已经,呃不用它了哈,呃,开源框架,这也是我们开发当中真正用的。
15:01
啊,像这用这个机会基本没有啊,也很少自己去写了,就啊当然了,你说我自己造一个,呃,封装起来,我这也叫框架,就以你的名字命名的。也行是吧。可以啊。嗯,开框架wall里这我们当时讲过啊,这个处理这个数据比较小的时候啊,哎,Char啊,Final啊,KTP等等,还有其他的一些啊,这个这个框架框架哈,这个呢就都可以,诶我们讲到这些项目的时候呢,练到哪个的时候,大家都练一练啊,其实整个这个套路呢,都差不太多哈,就是你提供了你要请求的这个具体的这个URL以及一些参数,呃,然后呢,去联网以后,后边这些东西都不用你管,直接呢处理响应成功了,失败了,写相应的回调就可以。啊,整体的套路都如此。好,这是几种存储方式啊,然后这个为什么还要放一个content provider。啊,以及涉及到了content resolve啊,就是因为呢,真正我们面试里边去谈数据存储这几种方式的时候呢,啊这是一种,这呢可能是第二种啊第三种第四种,这呢是第五种。
16:07
呃,就是我们自己呢,通过contain resolve去调用,呃,这个其他应用中provide所对应的数据库中的数据。啊,当然增删改也是可以的,大家有没有暴露相应的这个方法啊,哎,所以呢,把它呢看成是第五种方式。哎,所以这里边呢,又把它呢给罗列了一下。啊,这个呢,就简单来说啊,为什么使用什么是它这个我们讲课时候都说到了,哎主要重点呢,就是关于这个contain resolve啊,因为它呢,我们基本上不会去提供的。哎,我们往往是通过自己的or去访问系统这些应用的,比如说联系人。啊,短信数据等等这样的一些结构啊,那我们就需要这样用,包括我们上午讲的访问一下系统图库。啊,也是通过这个UI啊,来进行调用系统这个数据库里边这样的一些信息的哈。好,这呢就是我们说的result,那result既然你要用,你得知道怎么实例化。
17:02
哎,通过调用它这个对象的增产改查方法,进而呢,再去调用你相对应的,哎,你那个UI啊,所对应的那个provider里边的增产改查,然后呢,它再就自动给你返回你这块呢,该咋处理咋处理就行。这是我们涉及到的这样的一些类啊,一些类。好,那具体这有个练习就是诶读这个联系人的这呢是比较典型的一个,诶可能的provider或者result的一个使用行,就这么几个点啊,那数据存储的内容,那回头的话呢,再展开,那就需要在这个把这个框架这块呢再展开说一说。啊,回头我们还会讲一个,呃,联网这些框架这个源码啊,带着大家去看这层,到时候面试的时候呢,那这个也要能自己说一说,所以在这呢,先不展开去说这个问题啊。这个。
我来说两句