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

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

一、首先引入

权限

XML 复制代码
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

二、下面是Activity

java 复制代码
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 复制代码
<?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>

效果图

相关推荐
千里马学框架2 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台2 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone2 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc2 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo2 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077002 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone2 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui