笔记 - Android - 5.数据存储和访问、XML等

简介: Android -- 数据存储和访问: Android下的文件访问权限:     r:readable可读     w:writeable可写     x:可执行     Permissions(权限):         - --- --- ---     第一(位置0)表示文件或目录         > - 表示文件         > d 表示目录   
Android -- 数据存储和访问:

Android下的文件访问权限:
    r:readable可读
    w:writeable可写
    x:可执行
    Permissions(权限):
        - --- --- ---
    第一(位置0)表示文件或目录
        > - 表示文件
        > d 表示目录
    第2~4(位置1~3)表示当前用户对文件所具有的权限
    第5~7(位置4~6)表示当前用户所在组对文件所具有的权限
    第8~10(位置7~9)表示其他用户对该文件所具有的权限
    
    当前用户:每一个不同的应用程序都对应一个不同的用户,该用户就是该应用程序的当前用户
    当前用户组:当前用户所在的组
        通常情况下,Android下的每一个应用程序都对应一个独立的用户,都对应一个独立的用户组
        
    其他用户:除了应用程序自身对应的用户之外,其他的应用程序所对应的用户都称之为其他用户
    
    Linux chmod命令:chmod -> change mode 改变模式的意思,该Linux命令可以用来改变一个文件的权限
        用法:chmod 参数 文件名
            参数:该参数是一个二进制数的十进制表现形式,该二进制表示的是文件的权限,10个位置,不算第一位,
                有权限用1表示,无权限则用0表示,每三位一组,每组二进制数的十进制连起来则是该参数。
                如: - rwx rw- --- 该权限的二进制表示为
                      111 110 000 对应的十进制则为
                       7   6   0  连起来就是 760,760就是该参数

一、保存文件到手机内存
    SharedPreferences的使用:该对象可以用来保存数据信息,最终会在程序数据目录下生成一个shared_prefs文件夹,
        shared_prefs文件夹下会生成一个xml配置文件,数据就保存在这个xml文件中。
        
        使用SharedPreferences存数据:
            1.创建对象,通过上下文的getSharedPreferences(String name, int mode) 方法获得一个ShardPreferences对象,
            2.创建一个编辑器对象Editor,通过SharedPreferences对象的edit()方法,
            3.使用编辑器对象存入数据,通过调用Editor.putXxx(key, value)方法,
                putXxx()方法有
                putString(String key, String value),
                putBoolean(String key, boolean value),
                putFloat(String key, float value),
                putLong(String key, long value),
                putStringSet(String key, Set<String> value),该方法value是一个Set<String>集合
            4.最后一步必不可少,提交数据,调用Editor.commit()方法,只有调用了该方法后,数据才能正确的保存到shared_prefs文件夹
                下的xml文件。
            
        使用SharedPreferences读取数据:
            1.创建对象,与上述方法相同,
            2.调用SharedPreferences对象的getXxx(key, defaultValue)方法
                > String key:存入数据时所使用的key
                > defaultValue:默认值,当getXxx()方法没有取到数据时,返回该默认值。
                > getXxx()方法有:
                    getString(String key, String defValue)
                    getBoolean(String key, boolean delValue)
                    getLong(String key, long delValue)
                    getFloat(String key, float defValue)
                    getStringSet(String key, Set<String> defValue)
                与Editor对象的putXxx()方法对应。
        
二、保存文件到手机sd卡
    Environment的使用:环境,一个静态工具类,可以操作外部存储设备SD卡,无序创建对象。
    将数据存储到SD卡:
    1.判断外部存储设备是否可用
        外部存储设备状态常量:
            String Environment.MEDIA_MOUNTED :外部存储设备状态可用
            String Environment.MEDIA_UNMOUNTED:外部存储设备状态不可用
        方法:
            static String Environment.getExternalStorageState():返回当前外部存储设备的状态(可用或不可用);
    2.获取外部存储设备的路径
        方法:
            File Environment.getExternalStorageDirectory():返回外部存储设备的跟目录的File对象;
    3.使用外部存储设备时,需要添加android.permission.WRITE_EXTERNAL_STORAGE 权限
    
三、生成Xml的两种方式
    1.使用StringBuffer类拼接字符串,以流的形式将xml文件写出;
    2.使用XmlSerializer类生成xml文件,该方法内部也是以流的方式生成xml文件:
        * 创建XmlSerializer对象:
            通过Xml.newSerializer()方法即可创建一个XmlSerializer对象,Xml是一个xml相关的工具类。
            XmlSerializer serializer = Xml.newSerializer();
        * 设置XmlSerializer的输出流参数,可以是字节流和字符流
            serializer.setOutput(OutputStream os, String encoding);
            或serializer.setOutput(Writer wirter);
        * 开始文档
            serializer.startDocument(String encoding, boolean standalone);
                > encoding:xml文件声明所用的编码
                > standalone:该xml文件是否是单独的xml文件,不受其它xml文件约束
        * 开始节点
            serializer.startTag(String namespace, String name)
                > namespace:命名空间,通常为null
                > name:节点名称,不需要尖括号
        * 给节点添加属性
            serializer.attribute(String namespace, String name, String value)
                > namespace:命名空间,通常为null
                > name:属性名称
                > value:属性值
        * 给节点添加内容
            serializer.text(String text)
                > text:需要添加在节点中的文本字符串
        * 结束节点
            serializer.endTag(String name)
                > name:标签名称,同startTag()
        * 结束文档
            serializer.endDocument();
            
        * 开始节点到结束节点这个步骤可循环!!!
            养成好的习惯,在写完开始后,立马把结束写上,然后在中间写内容,这样不容易出错!!!

四、解析xml文档
    使用XmlPullParser对象解析Xml文档
    * 创建XmlPullParser对象
        通过Xml类的newPullParser()方法即可创建一个XmlPullParser对象
            XmlPullParser parser = Xml.newPullParser();
        或者通过一个工厂类也可创建一个XmlPullParser对象:
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            XmlPullParser xpp = factory.newPullParser();
            
    * 设置输入流参数
        流可以是字符流或者字节流都可
        字节流:parser.setInput(InputStream in, String encoding)
            > in:对应文件的字节输入流对象
            > encoding:输入流编码
        字符流:parser.setInput(Reader reader)
            > reader:对应文件的字符输入流对象
    
    * 获得当前的事件类型
        事件类型:
            该解析Xml的过程是自上而下一行一行的解析,
            当指针指在文档开头时,对应的事件类型是 START_DOCUMENT,
            当指针指在开始节点处时,对应的事件类型是 START_TAG,
            当指针指在结束节点时,对应的事件类型是 END_TAG,
            当指针指在文档结尾时,对应的事件类型是 END_DOCUMENT。
            当指针指在开始标签和结束标签之间的文本时,事件类型是 TEXT
        需要用到事件类型常量有:
            ** XmlPullParser.START_DOCUMENT --> 表示文档的开始
            ** XmlPullParser.END_DOCUMENT --> 表示文档的结尾
            ** XmlPullParser.START_TAG --> 表示一个节点的开始
            ** XmlPullParser.END_TAG --> 表示一个节点的结束
            ** XmlPullParser.TEXT --> 表示开始节点和结束节点之间的文本
        int parser.getEventType():返回当前的事件类型
    
    * 循环判断当前的事件类型,只要事件类型不等于END_DOCUMENT,就表示没有解析到文档的结尾,循环处理操作
        循环中先判断事件类型是开始节点事件类型还是结束节点事件类型,根据不同对的事件类型做不同的操作。
        操作中常用到的方法:
            parser.getName():返回当前指针所处的节点名称,也就是标签名;
            parser.nextText():取出当前指针所处节点中的文本内容(开始标签和结束标签之间的内容)
            parser.getText():该方法配合常量TEXT一起使用,只有当事件类型为TEXT时,才可使用getText()方法取出
                当前指针所指的文本,取出的值与nextText()取出的相同。
            parser.getAttributeValue(int index):返回当前指针所指的节点的给定索引的属性值
                > index:节点中属性的索引,索引从0开始
            ......
    
    * 每循环一次,重新获取当前的事件类型,再次判断是否循环:
        eventType = parser.next();
    * 当eventType == END_DOCUMENT,xml文档解析结束。

目录
相关文章
|
5月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
875 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
737 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
946 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
5月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
283 0
|
10月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
287 2
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
469 15
|
Web App开发 安全 程序员
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
多年的互联网寒冬在今年尤为凛冽,坚守安卓开发愈发不易。面对是否转行或学习新技术的迷茫,安卓程序员可从三个方向进阶:1)钻研谷歌新技术,如Kotlin、Flutter、Jetpack等;2)拓展新功能应用,掌握Socket、OpenGL、WebRTC等专业领域技能;3)结合其他行业,如汽车、游戏、安全等,拓宽职业道路。这三个方向各有学习难度和保饭碗指数,助你在安卓开发领域持续成长。
348 1
FFmpeg开发笔记(五十五)寒冬里的安卓程序员可进阶修炼的几种姿势
|
JavaScript 前端开发 Java
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
IT寒冬使APP开发门槛提升,安卓程序员需转型。选项包括:深化Android开发,跟进Google新技术如Kotlin、Jetpack、Flutter及Compose;研究Android底层框架,掌握AOSP;转型Java后端开发,学习Spring Boot等框架;拓展大前端技能,掌握JavaScript、Node.js、Vue.js及特定框架如微信小程序、HarmonyOS;或转向C/C++底层开发,通过音视频项目如FFmpeg积累经验。每条路径都有相应的书籍和技术栈推荐,助你顺利过渡。
484 3
FFmpeg开发笔记(四十七)寒冬下安卓程序员的几个技术转型发展方向
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
698 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
453 12

热门文章

最新文章