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

    xiaoxiao2026-05-15  9

    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文档解析结束。
    最新回复(0)