實現效果
最開始
要保存的內容
點擊保存按鈕,保存成功
點擊讀取(讀取設置在項目的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