实现效果
最开始
要保存的内容
点击保存按钮,保存成功
点击读取(读取设置在项目的xml)
点击下一个是指数据一条条读取
上代码
设置读取权限:
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">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="没有数据"
android:id="@+id/tv_readXML"></TextView>
<Button
android:layout_width="match_parent"
android:onClick="SaveXmlClick"
android:layout_height="wrap_content"
android:text="XML保存序列化"></Button>
<Button
android:onClick="ReadXmlClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="读取序列化"></Button>
<Button
android:onClick="NextClick"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="下一个"></Button>
</LinearLayout>
MainActivity,java
package com.example.xmlpullparser;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Environment;
import android.util.Xml;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
int index = 0;
List<Student> students = null;
TextView tv1 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
students = new ArrayList<Student>();
tv1 = findViewById(R.id.tv_readXML);
Student studentBeauty = new Student(001,"范冰冰",20);
Student studentSexy = new Student(002,"林志玲",21);
Student studentHandsome = new Student(003,"张杰",22);
Student studentLover = new Student(004,"薛之谦",23);
students.add(studentBeauty);
students.add(studentHandsome);
students.add(studentLover);
students.add(studentLover);
}
//保存操作
public void SaveXmlClick(View view){
File file = new File(Environment.getExternalStorageDirectory(),"note.xml");
FileOutputStream fileOutputStream = null;
try{
fileOutputStream = new FileOutputStream(file);
//表明采用XML序列化存储
XmlSerializer xmlSerializer = Xml.newSerializer();
xmlSerializer.setOutput(fileOutputStream,"utf-8");
//开始写
xmlSerializer.startDocument("utf-8",true);
xmlSerializer.startTag(null,"Student");
for (Student student:students){
xmlSerializer.startTag(null,"student");
//写ID
xmlSerializer.attribute(null,"id",student.getStudentId()+"");
xmlSerializer.startTag(null,"name");
xmlSerializer.text(student.getStudenswatName());
xmlSerializer.endTag(null,"name");
xmlSerializer.startTag(null,"age");
xmlSerializer.text(student.getStudentAge()+"");
xmlSerializer.endTag(null,"age");
xmlSerializer.endTag(null,"student");
}
xmlSerializer.endTag(null,"Student");
xmlSerializer.endDocument();
//写入磁盘
xmlSerializer.flush();
fileOutputStream.close();
Toast.makeText(MainActivity.this,"Succeed",Toast.LENGTH_SHORT).show();
}catch (Exception e){
Toast.makeText(MainActivity.this,"Failed",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
//读操作
public void ReadXmlClick(View view){
students = new ArrayList<Student>();
students = getStudents(getResources().openRawResource(R.raw.myperson));
String strList = "";
for(Student student:students){
strList+="编号:"+student.getStudentId()+"姓名:"+student.getStudenswatName()+",年龄:"+student.getStudentAge()+"\n";
}
tv1.setText(strList);
}
//读出的算法
private List<Student> getStudents(InputStream inputStream){
//等待接收读出来的成员列表
List<Student> studentRead = null;
//将读出来的对象放到一个临时的变量中进行存储
Student student = null;
//声明一个解析器
XmlPullParser xmlPullParser = null;
try{
xmlPullParser = Xml.newPullParser();
//设置解析器xml的来源,并用utf-8进行读取
xmlPullParser.setInput(inputStream,"utf-8");
//获取事件类型(即xml的标签类型)
int eventType = xmlPullParser.getEventType();
while(eventType!=XmlPullParser.END_DOCUMENT){
switch (eventType){
case XmlPullParser.START_DOCUMENT:
studentRead = new ArrayList<Student>();
break;
case XmlPullParser.START_TAG:
if(xmlPullParser.getName().equals("student")){
String strId = xmlPullParser.getAttributeValue(0);
student = new Student();
student.setStudentId(Integer.parseInt(strId));
eventType = xmlPullParser.next();
}else if(xmlPullParser.getName().equals("name")){
String stuname = xmlPullParser.nextText();
student.setStudentName(stuname);
eventType = xmlPullParser.next();
}else if(xmlPullParser.getName().equals("age")){
String strage = xmlPullParser.nextText();
student.setStudentAge(Integer.parseInt(strage));
}
break;
case XmlPullParser.END_TAG:
if(xmlPullParser.getName().equals("student")){
studentRead.add(student);
student = null;
}
break;
}
eventType = xmlPullParser.next();
}
inputStream.close();
}catch (Exception e){
e.printStackTrace();
Toast.makeText(MainActivity.this,"Failed",Toast.LENGTH_SHORT).show();
}
return studentRead;
}
public void NextClick(View view){
List<Student> students1 = getStudents(getResources().openRawResource(R.raw.myperson));
Student student = students1.get(index);
String strList = "";
//一个一个显示
strList="编号:"+student.getStudentId()+"姓名:"+student.getStudenswatName()+",年龄:"+student.getStudentAge()+"\n";
tv1.setText(strList);
index++;
if(index == students1.size()){
index = 0;
}
}
}
Student.java
package com.example.xmlpullparser;
public class Student {
int StudentId = 0;
String StudentName = "";
int StudentAge = 0;
public Student(int studentId, String studentName, int studentAge) {
StudentId = studentId;
StudentName = studentName;
StudentAge = studentAge;
}
public Student(){
}
public int getStudentId() {
return StudentId;
}
public void setStudentId(int studentId) {
StudentId = studentId;
}
public String getStudenswatName() {
return StudentName;
}
public void setStudentName(String studentName) {
StudentName = studentName;
}
public int getStudentAge() {
return StudentAge;
}
public void setStudentAge(int studentAge) {
StudentAge = studentAge;
}
}
Raw里面设置的本地待读取xml:myperson.xml
<?xml version="1.0" encoding="utf-8"?>
<Student>
<student id="0">
<name>曹操</name>
<age>21</age>
</student>
<student id="1">
<name>刘备</name>
<age>20</age>
</student>
<student id="3">
<name>孙权</name>
<age>19</age>
</student>
</Student>
注意事项
要读取的xml文件必须设置在res下,建立文件夹是value = raw,创建xml文件时必须通过创建file—>file name:.xml 否则会报错。*
特别注意:
仅供参考学习,转载请附上原文链接
图片来源于网络、个人收藏、个人制作
该篇文章不做任何商业用途,纯属分享学习心得,如有侵权,望联系本人处理
还在读大学的程序员,项目经验少,如有纰漏,感谢指正
需要源代码请私聊联系本人
谢谢配合
如果这篇文章对您有帮助,小小的点个赞,算是给小学弟的鼓励吧!谢谢大佬!!/呱呱.jpg