安卓xml存储读取和sharedpreferences文件存储读取

news2024/12/25 4:34:23

起因今天有人问到我 xml文件存储读取和sharedpreferences读写该咋做,能不能帮忙写个案例,这里我简单写出一个案例,一下是全部的代码

一、首先引入

权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

二、下面是Activity



import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

public class MainActivity extends AppCompatActivity {
    private EditText ed_name;//名字
    private EditText ed_school_degree;//学号
    private EditText ed_age;//年龄
    private EditText ed_gender;//性别
    private EditText ed_face;//政治面貌
    private EditText ed_address;//家庭住址

    private Button btn_save_xml;//保存到xml
    private Button btn_read_xml;//从xml读取
    private Button btn_save_sharedpreferences;//保存到SharedPreferences
    private Button btn_read_sharedpreferences;//从SharedPreferences读取

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ed_name = findViewById(R.id.ed_name);
        ed_school_degree = findViewById(R.id.ed_school_degree);
        ed_age = findViewById(R.id.ed_age);
        ed_gender = findViewById(R.id.ed_gender);
        ed_face = findViewById(R.id.ed_face);
        ed_address = findViewById(R.id.ed_address);

        btn_save_xml = findViewById(R.id.btn_save_xml);
        btn_read_xml = findViewById(R.id.btn_read_xml);
//        xml文件存储读取
        btn_save_xml.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = ed_name.getText().toString();
                String school_degree = ed_school_degree.getText().toString();
                String age = ed_age.getText().toString();
                String gender = ed_gender.getText().toString();
                String face = ed_face.getText().toString();
                String address = ed_address.getText().toString();

                if (TextUtils.isEmpty(name)) {
                    showToast("请输入姓名");
                    return;
                }
                if (TextUtils.isEmpty(school_degree)) {
                    showToast("请输入学号");
                    return;
                }
                if (TextUtils.isEmpty(age)) {
                    showToast("请输入年龄");
                    return;
                }
                if (TextUtils.isEmpty(gender)) {
                    showToast("请输入性别");
                    return;
                }
                if (TextUtils.isEmpty(face)) {
                    showToast("请输入政治面貌");
                    return;
                }
                if (TextUtils.isEmpty(address)) {
                    showToast("请输入家庭住址");
                    return;
                }

                // 创建一个 DocumentBuilder 对象
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                DocumentBuilder builder;
                try {
                    builder = factory.newDocumentBuilder();
                    Document doc = builder.newDocument();

                    // 创建根元素
                    Element rootElement = doc.createElement("student");
                    doc.appendChild(rootElement);

                    // 创建子元素并设置文本内容
                    Element nameElement = doc.createElement("name");
                    nameElement.appendChild(doc.createTextNode(name));
                    rootElement.appendChild(nameElement);

                    Element schoolDegreeElement = doc.createElement("school_degree");
                    schoolDegreeElement.appendChild(doc.createTextNode(school_degree));
                    rootElement.appendChild(schoolDegreeElement);

                    Element ageElement = doc.createElement("age");
                    ageElement.appendChild(doc.createTextNode(age));
                    rootElement.appendChild(ageElement);

                    Element genderElement = doc.createElement("gender");
                    genderElement.appendChild(doc.createTextNode(gender));
                    rootElement.appendChild(genderElement);

                    Element faceElement = doc.createElement("face");
                    faceElement.appendChild(doc.createTextNode(face));
                    rootElement.appendChild(faceElement);

                    Element addressElement = doc.createElement("address");
                    addressElement.appendChild(doc.createTextNode(address));
                    rootElement.appendChild(addressElement);

                    // 将文档写入 XML 文件
                    TransformerFactory transformerFactory = TransformerFactory.newInstance();
                    Transformer transformer = transformerFactory.newTransformer();
                    DOMSource source = new DOMSource(doc);
                    StreamResult result = new StreamResult(new File(getFilesDir(), "student_info.xml"));
                    transformer.transform(source, result);

                    showToast("学生信息已保存到 XML 文件");

                } catch (ParserConfigurationException | TransformerException e) {
                    e.printStackTrace();
                    showToast("保存失败:" + e.getMessage());
                }
            }
        });
        btn_read_xml.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    // 创建一个 DocumentBuilder 对象
                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
                    DocumentBuilder builder = factory.newDocumentBuilder();

                    // 从文件中读取 XML 数据
                    File xmlFile = new File(getFilesDir(), "student_info.xml");
                    Document doc = builder.parse(xmlFile);

                    // 获取根元素
                    Element rootElement = doc.getDocumentElement();

                    // 获取子元素并读取其文本内容
                    String name = rootElement.getElementsByTagName("name").item(0).getTextContent();
                    String school_degree = rootElement.getElementsByTagName("school_degree").item(0).getTextContent();
                    String age = rootElement.getElementsByTagName("age").item(0).getTextContent();
                    String gender = rootElement.getElementsByTagName("gender").item(0).getTextContent();
                    String face = rootElement.getElementsByTagName("face").item(0).getTextContent();
                    String address = rootElement.getElementsByTagName("address").item(0).getTextContent();

                    // 显示读取的数据,您可以根据需要修改此部分
                    showToast("姓名: " + name + "\n" +
                            "学号: " + school_degree + "\n" +
                            "年龄: " + age + "\n" +
                            "性别: " + gender + "\n" +
                            "政治面貌: " + face + "\n" +
                            "家庭住址: " + address);

                } catch (ParserConfigurationException | SAXException | IOException e) {
                    e.printStackTrace();
                    showToast("读取失败:" + e.getMessage());
                }
            }
        });

        btn_save_sharedpreferences = findViewById(R.id.btn_save_sharedpreferences);
        btn_read_sharedpreferences = findViewById(R.id.btn_read_sharedpreferences);
//        sharedpreferences文件存储读取
        btn_save_sharedpreferences.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = ed_name.getText().toString();
                String school_degree = ed_school_degree.getText().toString();
                String age = ed_age.getText().toString();
                String gender = ed_gender.getText().toString();
                String face = ed_face.getText().toString();
                String address = ed_address.getText().toString();
                if (TextUtils.isEmpty(name)){
                    showToast("请输入姓名");
                    return;
                }
                if (TextUtils.isEmpty(school_degree)){
                    showToast("请输入学号");
                    return;
                }
                if (TextUtils.isEmpty(age)){
                    showToast("请输入年龄");
                    return;
                }if (TextUtils.isEmpty(gender)){
                    showToast("请输入性别");
                    return;
                }if (TextUtils.isEmpty(face)){
                    showToast("请输入政治面貌");
                    return;
                }if (TextUtils.isEmpty(address)){
                    showToast("请输入家庭住址");
                    return;
                }

                // 使用 SharedPreferences 保存数据
                SharedPreferences sharedPreferences = getSharedPreferences("student_info", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString("name", name);
                editor.putString("school_degree", school_degree);
                editor.putString("age", age);
                editor.putString("gender", gender);
                editor.putString("face", face);
                editor.putString("address", address);
                editor.apply();

                showToast("学生信息已保存到 SharedPreferences");

            }
        });
        btn_read_sharedpreferences.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 从 SharedPreferences 中读取学生信息
                SharedPreferences sharedPreferences = getSharedPreferences("student_info", Context.MODE_PRIVATE);
                String name = sharedPreferences.getString("name", "");
                String school_degree = sharedPreferences.getString("school_degree", "");
                String age = sharedPreferences.getString("age", "");
                String gender = sharedPreferences.getString("gender", "");
                String face = sharedPreferences.getString("face", "");
                String address = sharedPreferences.getString("address", "");

                // 显示读取的数据,您可以根据需要修改此部分
                showToast("姓名: " + name + "\n" +
                        "学号: " + school_degree + "\n" +
                        "年龄: " + age + "\n" +
                        "性别: " + gender + "\n" +
                        "政治面貌: " + face + "\n" +
                        "家庭住址: " + address);
            }


        });
    }

    private void  showToast(String msg){
        Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
    }
}

最后是activity_main.xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_height="60dp">

        <TextView
            android:layout_width="0dp"
            android:text="姓名:"
            android:gravity="center"
            android:layout_weight="1"
            android:layout_height="match_parent"/>

        <EditText
            android:id="@+id/ed_name"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:hint="请输入名字"
            android:maxLines="1"
            android:lines="1"
            android:layout_weight="4"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_marginTop="10dp"
        android:layout_height="60dp">

        <TextView
            android:layout_width="0dp"
            android:text="姓名:"
            android:gravity="center"
            android:layout_weight="1"
            android:layout_height="match_parent"/>

        <EditText
            android:id="@+id/ed_school_degree"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:hint="请输入学号"
            android:maxLines="1"
            android:lines="1"
            android:layout_weight="4"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_marginTop="10dp"
        android:layout_height="60dp">

        <TextView
            android:layout_width="0dp"
            android:text="年龄:"
            android:gravity="center"
            android:layout_weight="1"
            android:layout_height="match_parent"/>

        <EditText
            android:id="@+id/ed_age"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:hint="请输入年龄"
            android:maxLines="1"
            android:inputType="number"
            android:lines="1"
            android:layout_weight="4"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_marginTop="10dp"
        android:layout_height="60dp">

        <TextView
            android:layout_width="0dp"
            android:text="性别:"
            android:gravity="center"
            android:layout_weight="1"
            android:layout_height="match_parent"/>

        <EditText
            android:id="@+id/ed_gender"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:hint="请输入性别"
            android:maxLines="1"
            android:lines="1"
            android:layout_weight="4"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_marginTop="10dp"
        android:layout_height="60dp">

        <TextView
            android:layout_width="0dp"
            android:text="政治面貌:"
            android:gravity="center"
            android:layout_weight="1"
            android:layout_height="match_parent"/>

        <EditText
            android:id="@+id/ed_face"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:hint="请输入政治面貌"
            android:maxLines="1"
            android:lines="1"
            android:layout_weight="4"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_marginTop="10dp"
        android:layout_height="60dp">

        <TextView
            android:layout_width="0dp"
            android:text="家庭住址:"
            android:gravity="center"
            android:layout_weight="1"
            android:layout_height="match_parent"/>

        <EditText
            android:id="@+id/ed_address"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:hint="请输入家庭住址"
            android:maxLines="1"
            android:lines="1"
            android:layout_weight="4"/>
    </LinearLayout>
   <LinearLayout
       android:layout_width="match_parent"
       android:orientation="vertical"
       android:layout_marginLeft="16dp"
       android:layout_marginTop="16dp"
       android:layout_marginRight="16dp"
       android:layout_height="wrap_content">
       <Button
           android:id="@+id/btn_save_xml"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:text="保存到xml"/>
       <Button
           android:id="@+id/btn_read_xml"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_marginTop="10dp"
           android:text="从xml读取"/>

       <Button
           android:id="@+id/btn_save_sharedpreferences"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_marginTop="10dp"
           android:text="保存到SharedPreferences"/>

       <Button
           android:id="@+id/btn_read_sharedpreferences"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:layout_marginTop="10dp"
           android:text="从SharedPreferences读取"/>
   </LinearLayout>
</LinearLayout>

效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1606728.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode和pycharm等idea编写protobuf文件格式化

想在pycharm或者goland等idea中开发protobuf文件的话&#xff0c;可以安装一个插件&#xff1a;protocol-buffers 安装之后&#xff0c;proto文件就会支持高亮和格式化了。 如果是vscode想要编写proto文件&#xff0c;可以安装另外一个插件&#xff1a;vscode-proto3 安装后&a…

大华相机C#学习之IDevice类

获取方式 Enumerator.GetDeviceByGigeIP() 通过IP地址获取设备对象。 private void test_Click(object sender, EventArgs e) {devicesEnumerator.EnumerateDevices();device Enumerator.GetDeviceByGigeIP("192.168.0.11"); } 常用属性 DeviceInfo 获取设备的信…

Spring Boot 目前还是最先进的吗?

当谈到现代Java开发框架时&#xff0c;Spring Boot一直处于领先地位。它目前不仅是最先进的&#xff0c;而且在Java生态系统中拥有着巨大的影响力。 1. 什么是Spring Boot&#xff1f; Spring Boot是由Spring团队开发的开源框架&#xff0c;旨在简化基于Spring的应用程序的开…

预判验证:阿里申请的“国货甄选”商标被驳回!

在3个多月前去年12月20日的时候&#xff0c;普推知产老杨预判阿里申请的“国货甄选”会以绝对理由驳回&#xff0c;大概率不能通过初审下证&#xff0c;《阿里申请“国货甄选”商标&#xff0c;会通过不&#xff01;》&#xff0c;检索多个申请含有“国货”商标名称做了驳回复审…

算法练习第20天|回溯算法 77.组合问题 257. 二叉树的所有路径

1.什么是回溯算法&#xff1f; 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。其本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案。 2.为什么要有回溯算法? 那么既然回溯法并不高效为什么还要用它呢&#xff1f; 因为有的问题能暴力…

24位AD分辨率、256Ksps*16通道国产数据采集卡、uV级采集、支持IEPE

24位AD分辨率、256Ksps*16通道、uV级采集、USB数据传输、支持IEPE、C、LABVIEW、MATLAB、Python等多编程语言&#xff0c;提供例程&#xff0c;支持二次开发。 XM7016-以太网采集卡 XM7016是一款以太网型高速数据采集卡&#xff0c;具有16通道真差分输入&#xff0c;24位分辨率…

【SAP HANA 15】SQL锁表 (查询,解锁)

锁表查看 --锁表检查语句 SELECT C.CONNECTION_ID,PS.STATEMENT_STRINGFROM M_CONNECTIONS C JOIN M_PREPARED_STATEMENTS PSON C.CONNECTION_ID PS.CONNECTION_ID AND C.CURRENT_STATEMENT_ID PS.STATEMENT_IDWHERE C.CONNECTION_STATUS RUNNINGAND C.CONNECTION_TYPE Re…

Eureka基础介绍和使用

目录 一.理论基础 二.父项目 2.1 新建父项目 2.2 管理依赖 三.子项目 3.1 新建子项目 3.2 注册中心Server依赖和启动类和配置文件 3.3 生产者Client 依赖和启动类和配置文件 3.5 消费者Custmer依赖和配置类、启动类和配置文件 四.心跳 五.公共资源项目 5.1新建实体…

详细分析Mysql常用函数(附Demo)

目录 前言1. 聚合函数2. 字符串函数3. 日期函数4. 条件函数5. 数值函数6. 类型转换函数 前言 由于实战中经常运用&#xff0c;索性来一个总结文 创建一个名为 employees 的表&#xff0c;包含以下字段&#xff1a; employee_id&#xff1a;员工ID&#xff0c;整数类型 first…

张大哥笔记:0成本创业的小吃配方项目

作为一个在互联网行业沉浸了10年的创业老兵&#xff0c;我最深的体会就是&#xff1a;想要快速赚钱&#xff0c;就要去做与钱密切相关的项目&#xff0c;而最接近金钱的就是贩卖赚钱的机会。那么我们应该赚谁的钱呢&#xff1f;答案是赚那些想要赚钱的人的钱。 近日我刷到了一…

使用python-can和cantools实现arxml报文解析、发送和接收的完整指南

文章目录 背景一、硬件支持二、环境准备1、python解释器安装2、python库安装 三、 收发案例四、 方法拓展1、canoe硬件调用2、回调函数介绍 结论 背景 在汽车行业中&#xff0c;CAN (Controller Area Network) 总线是用于车辆内部通信的关键技术。arxml文件是一种用于描述CAN消…

【JAVA进阶篇教学】第三篇:JDK8中Stream API使用

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第三篇&#xff1a;JDK8中Stream API使用。 Java 8 中的 Stream API 提供了一种便捷、高效的方式来处理集合数据&#xff0c;它支持函数式编程风格的操作&#xff0c;包括过滤、映射、归约等。Stream API 可以大大简化集…

Docker容器逃逸-特权模式-危险挂载-Procfs

Docker容器逃逸-特权模式-危险挂载 Docker这个概念&#xff1a; Docker 容器与虚拟机类似&#xff0c;但二者在原理上不同&#xff0c;容器是将操作系统层虚拟化&#xff0c;虚拟机则是虚拟化硬件&#xff0c;因此容器更具有便携性、高效地利用服务器。 ‍ Docker会遇到的安…

C++学习————第七天(初始化列表、static,友元,内部类)

今天已经是C学习第七天&#xff0c;希望这篇文章能够给大家带来更多的帮助&#xff0c;相应文章都放在C学习专栏里面。 C学习————第五天&#xff08;构造函数 析构函数 拷贝构造函数&#xff09;-CSDN博客 C学习————第六天 &#xff08;运算符重载 const成员 取地址&…

记一次webshell排查但又无webshell的应急

某次应急中&#xff0c;客户吓坏了&#xff0c;说是内网流量分析设备中有很多webshell连接告警&#xff0c;作为一名卑微但又不失理想的安服仔&#xff0c;毅然直奔前线… 过程 去到现场后&#xff0c;直接打开客户的流量分析设备&#xff0c;的确看到一堆冒红的webshell连接…

【Python系列】.env文件

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

单节锂离子/锂聚合物电池保护IC SDG3JX

SDG3JX内置高精度电压检测电路和延迟电路&#xff0c;适用于锂离子/锂聚合物可充电电池的保护IC。SDG3JX 最适合于对单节锂离子/锂聚合物可充电电池组的过充电、过放电和过电流的保护。 特点  内置高精度电压检测电路 * 过充电检测电压:4.28V0.025V&#xff1b; * 过充电解除…

通过 Function Calling 构建自主 AI Agents

原文地址&#xff1a;Build Autonomous AI Agents with Function Calling 将聊天机器人转变为可以与外部 API 交互的代理 2024 年 4 月 2 日 Function Call&#xff08;函数调用&#xff09;并不是什么新鲜事。2023 年 7 月&#xff0c;OpenAI 为其 GPT 模型引入了函数调用&…

环境多介质逸度模型实践技术与典型案例【代码】

随着污染物在各种环境中的迁移和转化&#xff0c;多介质污染物模型日益受到关注。在各类多介质模型中&#xff0c;基于逸度概念的逸度模型由于运用范围广&#xff0c;建模数据要求较低而广受欢迎。 专题一&#xff1a;基本理论 1.逸度的定义 2.逸度模型的基本原理 3.各介质…

rocketmq-dashboard打包测试报错

rocketmq-dashboard运行的时候没问题&#xff0c;但是打包执行测试的时候就是报错 这时候跳过测试就可以成功 报错为 There are test failures. Please refer to D:\CodeEn\rocketmq-dashboard\target\surefire-reports for the individual test results. 你只需要跳过测试就…