Android核心技术-day02-09-生成xml文件 及 解析

BMS保护板原理图+PCB+固件源码+bin文件+上位机 BMS保护板原理图+PCB+固件源码+bin文件+上位机 单片机是STM32F303CCT6 1、带有软电源开关输入,带 LED (LOAD) 开/关 + 充电指示灯; 2、具有高压侧电源开关,控制通断; 3、隔离式 CAN 总线接口; 4、电流测量; 5、带有短路检测; 6、带有USB 接口通信和固件升级; 7、蜂鸣器指示错误状态; 8、体积小巧; 9、短时间最大负载电流+/- 100A,长时间约为70A; 10、最大充电电流 10A(带二极管)或 30A(带二极管旁路); 11、电池电压范围为 2.5V 至 4.5V; 12、包电压 12V 至 54V; 立即下载

AndroidManifest.xml

方式一:

package com.gaozewen.savexmlinfo;

import android.Manifest;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;

public class MainActivityOld extends BaseActivity {

    private EditText mEt_id;
    private EditText mEt_name;
    private EditText mEt_age;

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

        // 1. 找到所有需要用到的空间
        mEt_id = findViewById(R.id.et_id);
        mEt_name = findViewById(R.id.et_name);
        mEt_age = findViewById(R.id.et_age);
    }

    // 2. 将控件内容写到 xml 文件当中
    public void save(View view) {
        // 3. 根据控件读取用户输入的文本放入到字符串变量中
        String id =  mEt_id.getText().toString().trim();
        String name =  mEt_name.getText().toString().trim();
        String age =  mEt_age.getText().toString().trim();
        // 4. 判断是否有空的内容
        if (TextUtils.isEmpty(id) || TextUtils.isEmpty(name) || TextUtils.isEmpty(age)) {
            Toast.makeText(this,"信息不能为空", Toast.LENGTH_SHORT).show();
            return;
        } else {
            // 5. 将字符串写入到 xml 文件中
            final StringBuffer sb = new StringBuffer();
            sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>");
            sb.append("<info>");
            sb.append("<student>");
            sb.append("<id>"+id+"</id>");
            sb.append("<name>"+name+"</name>");
            sb.append("<age>"+age+"</age>");
            sb.append("</student>");
            sb.append("</info>");

            // 请求写入 sd 卡的权限
            performCodeWithPermission("保存学生信息到SD卡", new PermissionCallback() {
                @Override
                public void hasPermission() {
                    try {
                        File file = new File(Environment.getExternalStorageDirectory(), "info.xml");
                        FileOutputStream fos = new FileOutputStream(file);
                        fos.write(sb.toString().getBytes());
                        fos.close();
                        Toast.makeText(MainActivityOld.this,"保存学生信息成功", Toast.LENGTH_SHORT).show();
                    } catch (Exception e) {
                        e.printStackTrace();
                        Toast.makeText(MainActivityOld.this,"保存学生信息失败", Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void noPermission() {
                    Toast.makeText(MainActivityOld.this,"没有被授予权限", Toast.LENGTH_SHORT).show();
                }
            }, Manifest.permission.WRITE_EXTERNAL_STORAGE);


        }
    }
}

方式二:

package com.gaozewen.savexmlinfo;

import android.Manifest;
import android.os.Bundle;
import android.os.Environment;
import android.text.TextUtils;
import android.util.Xml;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import org.xmlpull.v1.XmlSerializer;

import java.io.File;
import java.io.FileOutputStream;

public class MainActivity extends BaseActivity {

    private EditText mEt_id;
    private EditText mEt_name;
    private EditText mEt_age;

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

        // 1. 找到所有需要用到的空间
        mEt_id = findViewById(R.id.et_id);
        mEt_name = findViewById(R.id.et_name);
        mEt_age = findViewById(R.id.et_age);
    }

    // 2. 将控件内容写到 xml 文件当中
    public void save(View view) {
        // 3. 根据控件读取用户输入的文本放入到字符串变量中
        final String id = mEt_id.getText().toString().trim();
        final String name = mEt_name.getText().toString().trim();
        final String age = mEt_age.getText().toString().trim();
        // 4. 判断是否有空的内容
        if (TextUtils.isEmpty(id) || TextUtils.isEmpty(name) || TextUtils.isEmpty(age)) {
            Toast.makeText(this, "信息不能为空", Toast.LENGTH_SHORT).show();
        } else {
            // 请求写入 sd 卡的权限
            performCodeWithPermission("保存学生信息到SD卡", new PermissionCallback() {
                @Override
                public void hasPermission() {
                    // 1. 创建一个 xml 文件的序列化器
                    // 2. 设置文件的输出和编码方式
                    // 3. 写 xml 文件的头
                    // 4. 写 info 节点
                    // 5. 写 student 节点
                    // 6. 写 属性
                    // 7. 写 name
                    // 8. 写 age
                    XmlSerializer serializer = Xml.newSerializer();
                    try {
                        FileOutputStream fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory(), "info.xml"));
                        serializer.setOutput(fos, "utf-8");
                        serializer.startDocument("utf-8",true);
                        serializer.startTag(null,"info");
                        serializer.startTag(null,"student");
                        serializer.attribute(null,"id",id);
                        serializer.startTag(null,"name");
                        serializer.text(name);
                        serializer.endTag(null,"name");
                        serializer.startTag(null,"age");
                        serializer.text(age);
                        serializer.endTag(null,"age");
                        serializer.endTag(null,"student");
                        serializer.endTag(null,"info");
                        serializer.endDocument();
                        fos.close();
                        Toast.makeText(MainActivity.this,"保存学生信息成功", Toast.LENGTH_SHORT).show();
                    } catch (Exception e) {
                        e.printStackTrace();
                        Toast.makeText(MainActivity.this,"保存学生信息失败", Toast.LENGTH_SHORT).show();
                    }
                }

                @Override
                public void noPermission() {
                    Toast.makeText(MainActivity.this, "没有被授予权限", Toast.LENGTH_SHORT).show();
                }
            }, Manifest.permission.WRITE_EXTERNAL_STORAGE);


        }
    }
}

解析:

package com.gaozewen.pulldemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Xml;
import android.view.View;

import org.xmlpull.v1.XmlPullParser;

import java.io.InputStream;

public class MainActivity extends AppCompatActivity {

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

    public void click(View view) {
        try {
            InputStream is = this.getAssets().open("info.xml");
            // 解析 info.xml
            try {
                // 1. 得到 xml 文件的解析器
                XmlPullParser parser = Xml.newPullParser();
                // 2. 得到输入流
                parser.setInput(is, "utf-8");
                // 3. 解析 xml 文件,获取当前事件类型
                int type = parser.getEventType();
                while (type != XmlPullParser.END_DOCUMENT) {
                    System.out.println(type + "----" + parser.getName() + "----" + parser.getText());
                    type = parser.next();
                }
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

【带状电容器计算用于电容式触摸传感器应用】半数值模型的电容式触摸传感器集成于金属基材涂层中研究(Matlab代码实现) 内容概要:本文针对电容式触摸传感器在金属基材上应用时易受干扰导致信号衰减的问题,提出一种集成于金属基材涂层中的带状电容器半数值计算模型。通过理论推导建立传感器电容的数学模型,设定合理的边界条件并采用数值方法求解,利用Matlab实现完整的仿真代码,对传感器在金属背景下的电容特性进行精确建模与性能分析。该方法有效提升了传感器的灵敏度与抗干扰能力,适用于高精度、复杂环境下的触摸感应场景,具有良好的工程应用价值。研究不仅提供了详细的建模流程与仿真验证,还开放了可复现的代码资源,便于后续优化与拓展。; 适合人群:从事电容式传感器设计、嵌入式系统开发、人机交互技术研究及相关领域的科研人员,以及具备电磁场理论基础和Matlab编程能力的硕士、博士研究生;; 使用场景及目标:①用于金属表面电容式触摸传感系统的建模与性能优化;②为抗金属干扰传感器提供有效的半数值仿真方法与技术支撑;③辅助高校科研与教学中对电容耦合机制的理解及仿真平台搭建; 阅读建议:建议结合Matlab代码逐模块调试,深入理解模型中几何参数、材料属性及边界条件对电容输出的影响规律,可进一步推广至其他复杂结构或非理想环境下的传感器设计中。 立即下载

相关推荐

(Multisim课设资料)最全面函数信号发生器(三角波+正弦波+方波信号+锯齿波仿真设计+报告文档

内容概要:本文档是一份综合性科研技术资源汇总,系统梳理了工程与计算机科学领域的多项关键技术及其实现方法,涵盖图像处理、路径规划、无人机应用、通信技术、信号处理、电力系统优化、车间调度、雷达技术、微电网与综合能源系统调度等多个前沿方向。文档重点提供了基于Matlab和Simulink的丰富仿真案例,包括裂纹检测、双目视觉体积测量、卡尔曼滤波状态估计、永磁同步电机控制、无功优化、多目标调度算法(如NSGA-II、粒子群算法)在能源与交通系统中的应用,以及遗传算法、差分进化、人工蜂群等智能优化算法的代码实现。资源强调理论与实践深度融合,配套完整的仿真模型、算法代码与实验结果,具有较强的工程复现价值和科研指导意义。; 适合人群:具备一定编程基础的研究生、科研人员及从事自动化、电气工程、控制工程、通信、人工智能等相关领域工作的技术人员,尤其适合有1-3年工作经验的研发人员。; 使用场景及目标:①用于高校课程设计、毕业设计、科研项目开发和技术复现;②支撑电力系统优化、智能制造调度、智能交通路径规划、无人机控制等实际工程问题的算法研究与仿真验证;③帮助读者掌握主流优化算法与信号处理技术的核心原理与代码实现。; 阅读建议:建议读者结合文中提供的Matlab/Simulink代码与仿真模型进行实践操作,优先选择与自身研究方向相关的主题深入学习,并参考所提供的网盘链接获取完整资源以辅助调试与复现实验结果。

宠物医院管理系统HarmonyOS ArkTS API 24@Builder 的本质是一种“局部组件“或“UI 片段“的抽象机制,它比 @Component 更轻量,同样可以接收参数和访问组件的状态

在 HarmonyOS NEXT 正式商用的背景下,ArkTS 作为鸿蒙生态的官方应用开发语言,正在从传统的命令式 UI 开发范式向声明式 UI 范式全面迁移。ArkUI 框架以组件化、声明式、状态驱动为核心特征,要求开发者以"描述 UI 应该是什么样"而非"一步步操作 UI 怎么变"的思维方式构建界面。本文以一个名为"智能账单"的三标签页记账应用为切入点,逐层拆解其数据模型设计、@Builder 组件复用策略、@State 状态管理机制、条件渲染导航模式,以及静态写死渲染与动态循环渲染之间的性能权衡,为

2401_86031952的博客 189

电机FOC控制实战:STM32 CubeMX配置六路互补PWM与死区优化

本文详细介绍了如何使用STM32 CubeMX配置六路互补PWM与死区优化,实现电机FOC控制。通过实战经验分享,包括时钟配置、定时器设置、死区时间计算及优化技巧,帮助开发者避免常见问题,提升电机控制性能。特别适用于STM32G4系列的无刷电机驱动应用。

weixin_29193259的博客 402

HarmonyOS 6.1 实战:组件之间通过属性传递(Props Down)和事件回调(Events Up)进行通信,形成单向数据流

鸿蒙操作系统(HarmonyOS)作为面向全场景智慧生活的分布式操作系统,其应用开发框架ArkUI提供了一套全新的声明式UI开发范式。ArkTS作为ArkUI的开发语言,在TypeScript的基础上进行了深度扩展,引入了装饰器、状态管理、自定义组件等一系列核心能力,使得开发者能够以近乎自然语言的方式描述界面结构与交互逻辑。在传统的Android开发中,开发者需要通过XML布局文件定义界面结构,再通过Java/Kotlin代码在运行时查找视图、绑定数据、监听事件。这种命令式的开发模式要求开发者精确描述"怎么

2401_86049470的博客 219

YOLOv5实战:无人机巡检图片差异对比与违建标记(附完整代码)

本文详细介绍了如何利用YOLOv5目标检测技术实现无人机巡检图片差异对比与违建标记。通过图像对齐、目标检测、差异分析和可视化标记四个步骤,构建高效的违建识别系统,显著提升城市管理效率。文章包含完整代码实现和性能优化技巧,为计算机视觉在无人机巡检中的应用提供实用指南。

weixin_42535720的博客 280

有限元分析必看:如何用ANSYS检查关键区域的网格质量(附操作截图)

本文聚焦有限元分析中决定仿真精度的关键环节,详细讲解了如何利用ANSYS Workbench对关键区域进行网格质量检查与优化。文章提供了从思维转变、实战操作到指标解读的完整流程,强调通过命名选择、Worksheet过滤器等工具实现定向检查,并给出了针对结构分析的关键区域网格质量阈值建议,帮助工程师提升仿真结果的可靠性与效率。

weixin_29200741的博客 464

Static interface methods are only supported starting with Android N (--min-api 24): void butterknif

指定项目的 jdk 版本 为 1.8 主工程 app 目录下 build.gradle   android { ... // 指定jdk版本 compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VER...

知识改变一切 802

最新Docker GPU支持全解析:为什么nvidia-smi能用但PyTorch找不到CUDA?

本文深入解析了Docker容器中nvidia-smi命令可用但PyTorch无法调用CUDA的根本原因。关键在于默认配置仅暴露了GPU的utility管理能力,而CUDA计算所需的compute能力未被激活。通过正确设置NVIDIA_DRIVER_CAPABILITIES环境变量为compute,utility,并配合--gpus参数,即可解决此问题,确保AI训练等任务顺利进行。

convnet3designer的博客 236

Android核心技术-day06-03-调用系统短信发送(不需要授权)

package com.gaozewen.sendsms; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; public clas...

知识改变一切 666

lvds接口_LVDS,接口,时序讲解,非常好的文章

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群1.1.1 LVDS接口分类1.1.1.1 单路6bit LVDS这种接口电路中,采用单路方式传输,每个基色信号采用6位数据,共18位RGB数据,因此,也称18位或18bit LVDS接口。此,也称18位或18bit LVDS接口。1.1.1.2 双路6bit LVDS这种接口电...

weixin_39639286的博客 1901

低代码Agent开发框架使用指南(二)—Coze平台核心功能概览

本篇分享系统介绍了字节跳动推出的低代码智能体开发平台Coze。Coze以免费易用、多模型支持和便捷的跨平台发布为核心优势,显著降低了智能体开发门槛。文章详细解析了平台的六大核心功能:扩展能力边界的插件系统、增强认知的知识库、结构化数据管理的数据库、可视化图像处理的图像流、实现复杂逻辑编排的工作流,以及处理复杂任务的多智能体协作机制,全面展现了Coze平台的强大能力。

weixin_42782643的博客 1357

Only fullscreen opaque activities can request orientation

manifest里 Activity 中 android:screenOrientation="portrait" 和 styles.xml 中 &lt;item name="android:windowIsTranslucent"&gt;true&lt;/item&gt;  同时设置的话 可出现崩溃 解决方案 去掉 android:windowIsTranslucent=“true” 即可...

知识改变一切 487

FPGA实现的AES加解密算法——Verilog源代码详解

本文将介绍基于FPGA的AES加解密算法的Verilog实现,并提供相应的源代码。根据密钥长度的不同,AES算法分为AES-128、AES-192和AES-256三种模式。对于已知的明文-密钥组合,可以使用在线的AES加解密工具计算出正确的密文,然后将该密文与FPGA加速器的输出进行比较。本文以AES-128算法为例,介绍基于FPGA的AES加解密算法的设计思路和Verilog实现。以上是基于FPGA的AES加解密算法的Verilog实现的相关内容。模块接受输入的明文和密钥,并输出加密后的密文。

HackSquad的博客 1975

Android核心技术-day05-03-学生信息管理系统小练习

package com.gaozewen.studentsystem.db; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; imp...

知识改变一切 462

Python 爬虫实战:于好大夫在线抓取医生评价数据,选择优质医疗服务

requests:用于发送 HTTP 请求,获取网页内容。或 lxml:用于解析 HTML 页面,提取目标数据。pandas:用于数据清洗和分析。matplotlib和seaborn:用于数据可视化。time:用于控制爬取速度,避免对服务器造成压力。通过本项目,我们实现了以下目标:使用 Python 爬虫抓取好大夫在线的医生评价数据。对数据进行清洗和分析,找出评价中的关键词和趋势。根据分析结果推荐优质医疗服务。

u014481728的博客 3367

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Android核心技术-day02-03-获取手机内部存储空间

package com.gaozewen.storagespace; import android.os.Bundle; import android.os.Environment; import android.support.v7.app.AppCompatActivity; import android.text.format.Formatter; import android.widg...

知识改变一切 358

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android核心技术-day02-05-创建别的应用程序可以读写的文件

package com.gaozewen.createfile; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import java.io.FileOutputStream; public class MainActivity extends AppCompatActivity { ...

知识改变一切 335

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android核心技术-day04-01-网络图片查看器(安卓消息循环机制)

package com.gaozewen.netimageviewer; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import a...

知识改变一切 334

Android核心技术-day05-05-安卓下的多线程下载(带ProgressBar)有bug版

package com.gaozewen.multidownloader; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.EditText; import android.widget.Lin...

知识改变一切 280

Android核心技术-day01-01-click事件的多种写法

方法一: Button bt_click = findViewById(R.id.bt_click); bt_click.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { System.out.println("哈...

知识改变一切 246

Android核心技术-day06-04-短信助手

package com.gaozewen.smshelper; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import a...

知识改变一切 234

Android核心技术-day04-02-网页源代码查看器(StreamUtils)

package com.gaozewen.htmlviewer.utils; import java.io.ByteArrayOutputStream; import java.io.InputStream; /** * 流的工具类 * @author gzw * @version $Rev$ * @des ${TODO} * @updateAuthor $Author$ * @u...

知识改变一切 232

Android核心技术-day01-03-短信发送器(授权代码封装)

BaseActivity.java package com.gaozewen.smssender; import android.content.DialogInterface; import android.content.pm.PackageManager; import android.os.Build; import android.support.annotation.NonNul...

知识改变一切 232

Android核心技术-day06-05-Activity生命周期,应用场景

package com.gaozewen.lifecycle; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; public class MainActivity extends...

知识改变一切 227

Android核心技术-day02-06-读取别的程序中公开的文件

package com.gaozewen.hacker; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Toast; import java.io.BufferedReader; import ...

知识改变一切 227

Android核心技术-day06-01-显式意图和隐式意图

package com.gaozewen.intent; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; public cla...

知识改变一切 227
上一篇: Android核心技术-day02-08-settings
下一篇: Android核心技术-day03-01-创建SQLite数据库
心灵泽尘
博客等级 码龄10年 32粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值