Android_数据存储XML

本文介绍了Android应用中数据存储的方法,包括内部存储与外部存储的获取方式,重点讲解了SharedPreferences的使用,从创建到读写的过程,并展示了如何通过两种方法生成XML文件及XML解析的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据存储

  • 内部存储获取

    getFilesDir()

  • 外部存储获取

    Environment.getExternalStorageDirectory()

  • SharedPreferences的使用

介绍

该方法会在app的目录下面创建一个share_pre文件夹,然后创建一个xml文件,可以用来存储一些零散的数据,比如用户名密码等。
存储数据方法
  1. SharedPreferences preferences = getSharedPreferences(“info”, MODE_PRIVATE);
  2. SharedPreferences.Editor eidtEditor = preferences.edit();
获取数据方式
  1. SharedPreferences preferences = getSharedPreferences(“info”, MODE_PRIVATE);
  2. preferences.getString(“name”, “”)

生成xml文件

xml文件结构

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<smss>
<sms>
    <address>12300</address>
    <body>cp0</body>
    <data>1500696752329</data>
    <type>1</type>
</sms>
<sms>
    <address>12300</address>
    <body>cp2</body>
    <data>1510696752329</data>
    <type>0</type>
</sms>
</smss>
方法一 StringBuffer拼接
 FileOutputStream fos = new FileOutputStream(file);
            buffer.append("<?xml version=\"1.0\" encoding=\"utf-8\"  standalone=\"yes\" ?>");
            buffer.append("<Message>");
            for (Message sms : smss
                    ) {
                buffer.append("<Sms>");

                buffer.append("<Address>");
                buffer.append(sms.getAddress());
                buffer.append("</Address>");

                buffer.append("<Body>");
                buffer.append(sms.getBody());
                buffer.append("</Body>");

                buffer.append("<Data>");
                buffer.append(sms.getData());
                buffer.append("</Data>");

                buffer.append("<Type>");
                buffer.append(sms.getType());
                buffer.append("</Type>");

                buffer.append("</Sms>");
            }
            buffer.append("</Message>");

            fos.write(buffer.toString().getBytes());
            fos.close();
方法二 XmlSerializer xmlSerializer = Xml.newSerializer();
try {
            FileOutputStream fos = new FileOutputStream(file);
            XmlSerializer xmlSerializer = Xml.newSerializer();
            xmlSerializer.setOutput(fos, "utf-8");
            xmlSerializer.startDocument("utf-8", true);
            xmlSerializer.startTag(null, "smss");
            for (Message sms : smss
                    ) {
                xmlSerializer.startTag(null, "sms");

                xmlSerializer.startTag(null, "address");
                xmlSerializer.text(sms.getAddress());
                xmlSerializer.endTag(null, "address");

                xmlSerializer.startTag(null, "body");
                xmlSerializer.text(sms.getBody());
                xmlSerializer.endTag(null, "body");

                xmlSerializer.startTag(null, "data");
                xmlSerializer.text(sms.getData());
                xmlSerializer.endTag(null, "data");

                xmlSerializer.startTag(null, "type");
                xmlSerializer.text(sms.getType() + "");
                xmlSerializer.endTag(null, "type");

                xmlSerializer.endTag(null, "sms");
            }
            xmlSerializer.endTag(null, "smss");
            xmlSerializer.endDocument();

XML解析XmlPullParser xmlPullParser = Xml.newPullParser();

   try {
            InputStream in = getResources().getAssets().open("sms.xml");
            Log.d(TAG, "getMessage: InputStream ===============-->" + in);
            XmlPullParser xmlPullParser = Xml.newPullParser();
            Message sms = null;
            xmlPullParser.setInput(in, "utf-8");
            int eventType = xmlPullParser.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType) {
                    case XmlPullParser.START_TAG:
                        if (xmlPullParser.getName().equals("smss")) {
                            getSmss = new ArrayList<>();
                        } else if (xmlPullParser.getName().equals("sms")) {
                            sms = new Message();
                        } else if (xmlPullParser.getName().equals("address")) {
                            sms.setAddress(xmlPullParser.nextText());
                        } else if (xmlPullParser.getName().equals("body")) {
                            sms.setBody(xmlPullParser.nextText());
                        } else if (xmlPullParser.getName().equals("data")) {
                            sms.setData(xmlPullParser.nextText());
                        } else if (xmlPullParser.getName().equals("type")) {
                            sms.setType(Integer.parseInt(xmlPullParser.nextText()));
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        getSmss.add(sms);
                        break;
                }
                eventType = xmlPullParser.next();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值