版权声明:心灵泽尘 https://blog.csdn.net/github_38313789/article/details/83756790
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();
}
}
}