保存成功后的的文件:

代码:

package com.glsite.savexmlinfo;import android.Manifest;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
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.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class MainActivity extends BaseActivity {private EditText mEtName;private EditText mEtAge;private EditText mEtId;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 1.找到所有需要用到的控件mEtName = (EditText) findViewById(R.id.et_name);mEtAge = (EditText) findViewById(R.id.et_age);mEtId = (EditText) findViewById(R.id.et_id);// 2.将控件内容写入到xml文件当中}/*** 将控件内容写入到xml文件当中* @param view*/public void save(View view) {// 3.根据控件读取用户输入的文本放入到字符串变量中final String name =  mEtName.getText().toString().trim();final String age =  mEtAge.getText().toString().trim();final String id =  mEtId.getText().toString().trim();// 4.判断是否有空的内容if (TextUtils.isEmpty(name) || TextUtils.isEmpty(age) || TextUtils.isEmpty(id)) {Toast.makeText(this,"信息不能为空", Toast.LENGTH_SHORT).show();return;} else {// 5.将字符串写入到xml文件中performCodeWithPermission("保存学生信息到sd卡", new PermissionCallback() {@Overridepublic void hasPermission() {// 1.创建一个xml文件的序列号器XmlSerializer serializer = Xml.newSerializer();// 2.设置文件的输出和编码方式FileOutputStream fos = null;try {fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory(), "info.xml"));serializer.setOutput(fos, "utf-8");// 3.写入xml文件的头serializer.startDocument("utf-8", true);// 4.写info节点serializer.startTag(null, "info");// 5.写student节点serializer.startTag(null, "student");// 6.写属性serializer.attribute(null, "id", id);// 7.写nameserializer.startTag(null, "name");serializer.text(name);serializer.endTag(null, "name");// 8.写ageserializer.startTag(null, "age");serializer.text(age);serializer.endTag(null, "age");serializer.endTag(null, "student");serializer.endTag(null, "info");serializer.endDocument();Toast.makeText(MainActivity.this,"保存学生信息成功", Toast.LENGTH_SHORT).show();} catch (Exception e) {e.printStackTrace();} finally {try {if (fos != null)fos.close();} catch (IOException e) {e.printStackTrace();}}}@Overridepublic void noPermission() {Toast.makeText(MainActivity.this,"没有获得写入SD卡的权限", Toast.LENGTH_SHORT).show();}}, Manifest.permission.WRITE_EXTERNAL_STORAGE);}}
}

运行时权限

package com.glsite.savexmlinfo;import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;/*** @author Admin* @version $Rev$* @des ${TODO}* @updateAuthor $Author$* @updateDes ${TODO}*/
public class BaseActivity extends AppCompatActivity {//**************** Android M Permission (Android 6.0权限控制代码封装)private int permissionRequestCode = 88;private PermissionCallback permissionRunnable;public interface PermissionCallback {void hasPermission();void noPermission();}/*** Android M运行时权限请求封装** @param permissionDes 权限描述* @param runnable      请求权限回调* @param permissions   请求的权限(数组类型),直接从Manifest中读取相应的值,比如Manifest.permission.WRITE_CONTACTS*/public void performCodeWithPermission(@NonNull String permissionDes, PermissionCallback runnable, @NonNull String... permissions) {if (permissions == null || permissions.length == 0)return;//        this.permissionrequestCode = requestCode;this.permissionRunnable = runnable;if ((Build.VERSION.SDK_INT < Build.VERSION_CODES.M) || checkPermissionGranted(permissions)) {if (permissionRunnable != null) {permissionRunnable.hasPermission();permissionRunnable = null;}} else {//permission has not been granted.requestPermission(permissionDes, permissionRequestCode, permissions);}}private boolean checkPermissionGranted(String[] permissions) {boolean flag = true;for (String p : permissions) {if (ActivityCompat.checkSelfPermission(this, p) != PackageManager.PERMISSION_GRANTED) {flag = false;break;}}return flag;}private void requestPermission(String permissionDes, final int requestCode, final String[] permissions) {if (shouldShowRequestPermissionRationale(permissions)) {/*1. 第一次请求权限时,用户拒绝了,下一次:shouldShowRequestPermissionRationale()  返回 true,应该显示一些为什么需要这个权限的说明2.第二次请求权限时,用户拒绝了,并选择了“不在提醒”的选项时:shouldShowRequestPermissionRationale()  返回 false3. 设备的策略禁止当前应用获取这个权限的授权:shouldShowRequestPermissionRationale()  返回 false*/// Provide an additional rationale to the user if the permission was not granted// and the user would benefit from additional context for the use of the permission.// For example, if the request has been denied previously.//            Snackbar.make(getWindow().getDecorView(), requestName,//                    Snackbar.LENGTH_INDEFINITE)//                    .setAction(R.string.common_ok, new View.OnClickListener() {//                        @Override//                        public void onClick(View view) {//                            ActivityCompat.requestPermissions(BaseAppCompatActivity.this,//                                    permissions,//                                    requestCode);//                        }//                    })//                    .show();//如果用户之前拒绝过此权限,再提示一次准备授权相关权限new AlertDialog.Builder(this).setTitle("提示").setMessage(permissionDes).setPositiveButton("授权", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode);}}).show();} else {// Contact permissions have not been granted yet. Request them directly.ActivityCompat.requestPermissions(BaseActivity.this, permissions, requestCode);}}private boolean shouldShowRequestPermissionRationale(String[] permissions) {boolean flag = false;for (String p : permissions) {if (ActivityCompat.shouldShowRequestPermissionRationale(this, p)) {flag = true;break;}}return flag;}/*** Callback received when a permissions request has been completed.*/@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) {if (requestCode == permissionRequestCode) {if (verifyPermissions(grantResults)) {if (permissionRunnable != null) {permissionRunnable.hasPermission();permissionRunnable = null;}} else {Toast.makeText(this, "暂无权限执行相关操作!", Toast.LENGTH_SHORT).show();if (permissionRunnable != null) {permissionRunnable.noPermission();permissionRunnable = null;}}} else {super.onRequestPermissionsResult(requestCode, permissions, grantResults);}}public boolean verifyPermissions(int[] grantResults) {// At least one result must be checked.if (grantResults.length < 1) {return false;}// Verify that each required permission has been granted, otherwise return false.for (int result : grantResults) {if (result != PackageManager.PERMISSION_GRANTED) {return false;}}return true;}//********************** END Android M Permission ****************************************
}

页面

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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:layout_height="match_parent"tools:context=".MainActivity"><!-- <Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="jiexi"android:onClick="click"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" />--><EditTextandroid:id="@+id/et_name"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="8dp"android:layout_marginLeft="8dp"android:layout_marginTop="60dp"android:layout_marginEnd="8dp"android:layout_marginRight="8dp"android:ems="10"android:hint="请输入学生的姓名"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><EditTextandroid:id="@+id/et_age"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="8dp"android:layout_marginLeft="8dp"android:layout_marginTop="60dp"android:layout_marginEnd="8dp"android:layout_marginRight="8dp"android:ems="10"android:hint="请输入学生的年龄"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/et_name" /><EditTextandroid:id="@+id/et_id"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="8dp"android:layout_marginLeft="8dp"android:layout_marginTop="60dp"android:layout_marginEnd="8dp"android:layout_marginRight="8dp"android:ems="10"android:hint="请输入学生的学号"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/et_age" /><Buttonandroid:id="@+id/button"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginStart="8dp"android:layout_marginLeft="8dp"android:layout_marginTop="60dp"android:layout_marginEnd="8dp"android:layout_marginRight="8dp"android:onClick="save"android:text="保存"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/et_id" /></android.support.constraint.ConstraintLayout>

权限

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.glsite.pulldemo">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

XmlSerializer保存xml文件android相关推荐

  1. (3)[wp7数据存储] WP7 IsolatedStorage系列篇——通过XmlSerializer读写XML文件 [复制链接]...

    发表于 2012-5-17 15:51:07 |只看该作者 |倒序浏览 分享到: 本帖最后由 agameboy 于 2012-5-17 17:08 编辑 这一篇我们会通过XmlSerializer读写 ...

  2. BCB6无XMLDOC控件下生成及保存XML文件

    某个项目需要将数据保存为XML文件,但是BCB6没安装XMLDOC,想下载安装包也难找,于是就在网上查了些资料,不使用XMLDOC的情况下生成和保存XML文件. 包含头文件: #include < ...

  3. android 真机无法读取tomcat的xml文件,Android为何总是无法正常访问Tomcat服务器

    今天开始写一个MP3播放器,部署好了Tomcat服务器,写好了代码,结果总是无法连接,开始苦逼的搜索各种线索,始终无果,最后看到一篇帖子,由于现在的Tomcat服务器版本更新之后,所有的资源放在Web ...

  4. android apk xml文件,Android 反编译Apk提取XML文件

    Apktool 下载地址:Apktool 打开cmd终端:java -jar apktool_2.3.3.jar  d xxx.apk 示例: D:\TOOL\Android反编译工具[全]\2018 ...

  5. Android动态加载XML文件及控件来简单实现QQ好友印象的功能

    在android开发中,我们常常会遇到界面布局控件不确定的情况.由于某些功能的原因或者为了体现某些app的特色等这些原因会导致我们在实现界面布局时需要动态去加载一些控件,那么下面就来介绍一下如何用动态 ...

  6. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  7. android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  8. java解析xml文件:创建、读取、遍历、增删查改、保存

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用JDOM接口解析xml文件,包含创建.增删查改.保存,读取等操作. 需要引入jdom.jar,下载 xercesImpl.jar,下载 ...

  9. Android 之解析XML文件

    1.布局页面 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...

最新文章

  1. python基于值得内存_为什么说Python采用的是基于值的内存管理模式
  2. org.apache.hadoop.fs-ChecksumException
  3. 在 2016 年做 PHP 开发是一种什么样的体验?
  4. 工作一年的状态与总结
  5. 【Android个人理解(八)】跨应用调用不同组件的方法
  6. 刷新后控制TAB键到下一个控件
  7. Monkey随机性能压测初探(一)
  8. 一起学习C语言:函数(三)
  9. tinymce 工具栏 不显示_winform中MenuStrip主菜单、工具栏、状态栏、托盘、其他控件...
  10. CryptoQuant CEO:比特币大规模从Coinbase流出是最强劲的看涨信号
  11. C# 使用 NPOI操作excle文件(读取与新建重写)
  12. php取名字第一个字,php 获取姓名拼音首字母
  13. Linux 中最好的 CHM 文件阅读器
  14. 华为手机隐藏指令的5个代码
  15. Android 呼吸灯流程分析(一)
  16. Apifiny任命FBI前高管Timothy Murphy为董事会成员,帮助公司完成上市计划
  17. 公历转农历C/C++代码
  18. 不会编程,别着急!免编程工具助你快速开发App
  19. 微信小程序案例php,微信小程序实现删除处理的案例
  20. 文化 宝藏 文物 古文

热门文章

  1. Win2008 R2 VDI动手实验系列之八:远程桌面虚拟机终极测试
  2. Android Activity绑定到Service
  3. 换工位解决ssh 卡住的背后
  4. 环境部署(二):Linux下安装jenkins
  5. 大型网站架构演进(4)使用应用服务器集群
  6. android 生成签名和SHA1签名信息
  7. JSPatch库, 一个Apple官方支持的实现在线更新iOS应用的库
  8. Objective-C 点语法 成员变量的作用域 @property和@synthesize关键字 id类型
  9. JQuery获取当前屏幕的高度宽度
  10. 利用Microsoft.VisualBasic dll来修改系统时间