05_学生管理系统,xml读写,布局的综合应用

简介: 最终要做的项目目标: 2、编写Android清单文件AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="co

  1. 最终要做的项目目标:

 


2
、编写Android清单文件AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.itheima27.sutdentmanager"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.itheima27.sutdentmanager.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 

</manifest>

3 编写布局文件activity_main.xml                        

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="@android:color/white"

    android:orientation="vertical" >

 

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="center_horizontal"

        android:layout_marginTop="5dip"

        android:text="学生管理系统"

        android:textColor="#99CCFF"

        android:textSize="23sp"/>

   

    <RelativeLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_marginTop="5dip"

        android:padding="5dip">

       

        <TextView

            android:id="@+id/tv_name"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:paddingLeft="15dip"

            android:paddingRight="15dip"

            android:text="姓名"

            android:textSize="18sp" />

       

        <TextView

            android:id="@+id/tv_sex"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_marginLeft="5dip"

            android:layout_toRightOf="@id/tv_name"

            android:paddingLeft="15dip"

            android:paddingRight="15dip"

            android:text="性别"

            android:textSize="18sp" />

       

        <TextView

            android:id="@+id/tv_age"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_marginLeft="5dip"

            android:layout_toRightOf="@id/tv_sex"

            android:paddingLeft="15dip"

            android:paddingRight="15dip"

            android:text="年龄"

            android:textSize="18sp" />

       

        <!-- 在姓名的下面 -->

        <EditText

            android:id="@+id/et_name"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignLeft="@id/tv_name"

            android:layout_alignRight="@id/tv_name"

            android:layout_below="@id/tv_name"

            android:singleLine="true" />

       

        <!-- 在性别的下面 -->

        <EditText

            android:id="@+id/et_sex"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignLeft="@id/tv_sex"

            android:layout_alignRight="@id/tv_sex"

            android:layout_below="@id/tv_sex"

            android:singleLine="true" />

       

        <EditText

            android:id="@+id/et_age"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignLeft="@id/tv_age"

            android:layout_alignRight="@id/tv_age"

            android:layout_below="@id/tv_age"

            android:inputType="number"

            android:singleLine="true" />

       

        <Button

            android:id="@+id/btn_add_student"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_alignBaseline="@id/et_age"

            android:layout_toRightOf="@id/et_age"

            android:text="添加学生"

            android:textSize="20sp" />

    </RelativeLayout>

   

    <ScrollView

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_weight="1" >

 

        <LinearLayout

            android:id="@+id/ll_student_list"

            android:layout_width="fill_parent"

            android:layout_height="fill_parent"

            android:layout_margin="1dip"

            android:orientation="vertical"

            android:padding="5dip" >

        </LinearLayout>

    </ScrollView>

   

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:layout_marginTop="5dip"

        android:orientation="horizontal" >

       

        <Button

            android:id="@+id/btn_save"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="保存数据"

            android:textSize="20sp" />

 

        <Button

            android:id="@+id/btn_restore"

            android:layout_width="wrap_content"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="恢复数据"

            android:textSize="20sp" />

    </LinearLayout>

</LinearLayout>

4 编写Student实体

package com.itheima27.sutdentmanager.entities;

 

public class Student {

    private String name;

    private String sex;

    private Integer age;

 

    public Student() {

       super();

    }

    public Student(String name, String sex, Integer age) {

       super();

       this.name = name;

       this.sex = sex;

       this.age = age;

    }

    public String getName() {

       return name;

    }

    public void setName(String name) {

       this.name = name;

    }

    public String getSex() {

       return sex;

    }

    public void setSex(String sex) {

       this.sex = sex;

    }

    public Integer getAge() {

       return age;

    }

    public void setAge(Integer age) {

       this.age = age;

    }

    @Override

    public String toString() {

       return "Student [name=" + name + ", sex=" + sex + ", age=" + age + "]";

    }

}

5 编写MainActivity

package com.itheima27.sutdentmanager;

 

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.util.ArrayList;

import java.util.List;

 

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlSerializer;

 

import android.graphics.Color;

import android.os.Bundle;

import android.os.Environment;

import android.support.v7.app.ActionBarActivity;

import android.text.TextUtils;

import android.util.Xml;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.EditText;

import android.widget.LinearLayout;

import android.widget.TextView;

import android.widget.Toast;

 

import com.itheima27.sutdentmanager.entities.Student;

 

public class MainActivity extends ActionBarActivity implements OnClickListener {

 

    private EditText etName;

    private EditText etSex;

    private EditText etAge;

    private LinearLayout llStudentList;

    private List<Student> studentList;

    private String filePath;

   

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

   

       init();

    }

   

    private void init() {

       etName = (EditText) findViewById(R.id.et_name);

       etSex = (EditText) findViewById(R.id.et_sex);

       etAge = (EditText) findViewById(R.id.et_age);

      

       llStudentList = (LinearLayout) findViewById(R.id.ll_student_list);

 

       findViewById(R.id.btn_save).setOnClickListener(this);

       findViewById(R.id.btn_restore).setOnClickListener(this);

       findViewById(R.id.btn_add_student).setOnClickListener(this);

      

       studentList = new ArrayList<Student>();

       filePath = Environment.getExternalStorageDirectory().getPath() + "/student.xml";

    }

 

    public void onClick(View v) {

       switch (v.getId()) {

       case R.id.btn_save:

           if(studentList.size() > 0) {

              //将信息写到xml文件中

              if(saveStudent2Local()) {

                  Toast.makeText(this, "保存成功", 0).show();

              } else {

                  Toast.makeText(this, "保存失败", 0).show();

              }

           } else {

              Toast.makeText(this, "当前没有数据", 0).show();

            }

           break;

          

       case R.id.btn_restore:

           if(restoreStudentFromLocal()) {

              Toast.makeText(this, "恢复成功", 0).show();

           } else {

              Toast.makeText(this, "恢复失败", 0).show();

           }

           break;

       case R.id.btn_add_student:

           addStudent();

           break;

       default:

           break;

       }

    }

   

    /**

     * xml中读出Student数据

     * @return

     */

    private boolean restoreStudentFromLocal() {

       try {

           XmlPullParser parser = Xml.newPullParser();

           parser.setInput(new FileInputStream(filePath), "utf-8");

          

           int eventType = parser.getEventType();

          

           studentList.clear();

          

           Student student = null;

           String nodeName = null;

           while(eventType != XmlPullParser.END_DOCUMENT) {

              nodeName = parser.getName();

              switch (eventType) {

              case XmlPullParser.START_TAG:

                  if("student".equals(nodeName)) {

                     student = new Student();

                  } else if("name".equals(nodeName)) {

                     student.setName(parser.nextText());

                  } else if("sex".equals(nodeName)) {

                     student.setSex(parser.nextText());

                  } else if("age".equals(nodeName)) {

                      student.setAge(Integer.valueOf(parser.nextText()));

                  }

                  break;

              case XmlPullParser.END_TAG:

                  if("student".equals(nodeName)) {

                     studentList.add(student);

                  }

                  break;

              default:

                  break;

              }

              eventType = parser.next();

           }

           refreshStudentList();

          

           return true;

       } catch (Exception e) {

           e.printStackTrace();

       }

       return false;

    }

   

    /**

     * 恢复studentList列表

     */

    private void refreshStudentList() {

       llStudentList.removeAllViews();

       TextView childView;

       for (Student student : studentList) {

           childView = new TextView(this);

           childView.setTextSize(23);

           childView.setTextColor(Color.BLACK);

           childView.setText("  " + student.getName() + "  " + student.getSex() + "  " + student.getAge());

           llStudentList.addView(childView);

       }

    }

   

    private boolean saveStudent2Local() {

       try {

           XmlSerializer serializer = Xml.newSerializer();

           serializer.setOutput(new FileOutputStream(filePath), "utf-8");

          

           serializer.startDocument("utf-8", true);

           serializer.startTag(null, "infos");

           for (Student stu : studentList) {

              serializer.startTag(null, "student");

             

              serializer.startTag(null, "name");

              serializer.text(stu.getName());

              serializer.endTag(null, "name");

 

              serializer.startTag(null, "sex");

              serializer.text(stu.getSex());

              serializer.endTag(null, "sex");

 

              serializer.startTag(null, "age");

              serializer.text(String.valueOf(stu.getAge()));

              serializer.endTag(null, "age");

             

              serializer.endTag(null, "student");

           }

           serializer.endTag(null, "infos");

           serializer.endDocument();

           return true;

       } catch (Exception e) {

           e.printStackTrace();

       }

       return false;

    }

 

    private void addStudent() {

       String name = etName.getText().toString();

       String sex = etSex.getText().toString();

       String age = etAge.getText().toString();

      

       if(!TextUtils.isEmpty(name)

              && !TextUtils.isEmpty(sex)

              && !TextUtils.isEmpty(age)) {

           studentList.add(new Student(name, sex, Integer.valueOf(age)));

           TextView childView = new TextView(this);

           childView.setTextSize(23);

           childView.setTextColor(Color.BLACK);

           childView.setText("  " + name + "  " + sex + "  " + age);

           llStudentList.addView(childView);

       } else {

           Toast.makeText(this, "请正确输入", 0).show();

       }

    }

}

 

目录
相关文章
|
XML 前端开发 Android开发
Android XML 布局基础(四)内外边距(margin、padding)
Android XML 布局基础(四)内外边距(margin、padding)
295 0
|
1月前
|
XML 编解码 搜索推荐
XML 布局小技巧
【10月更文挑战第24天】通过掌握这些 XML 布局小技巧,我们可以更轻松地设计出高质量的用户界面,提升用户体验。在实际应用中,要根据具体项目的需求和特点,灵活运用这些技巧,不断探索和创新,打造出独具特色的界面布局。
55 1
|
7月前
|
XML JSON 前端开发
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(简单支持发起人与审批人的流程)
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(简单支持发起人与审批人的流程)
439 2
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(简单支持发起人与审批人的流程)
|
2月前
|
XML 存储 数据库
XML在数据库中有哪些应用?
【10月更文挑战第17天】XML在数据库中有哪些应用?
47 2
|
7月前
|
XML JSON 前端开发
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(支持并行网关)
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(支持并行网关)
365 3
|
7月前
|
XML JSON 前端开发
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(排它条件网关)
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(排它条件网关)
122 3
基于若依的ruoyi-nbcio流程管理系统仿钉钉流程json转bpmn的flowable的xml格式(排它条件网关)
|
7月前
|
XML 网络协议 Java
XML Web 服务技术解析:WSDL 与 SOAP 原理、应用案例一览
XML Web服务是基于WSDL、SOAP、RDF和RSS等标准的网络应用程序组件技术。WSDL描述服务接口和消息格式,SOAP用于结构化信息交换,RDF描述网络资源,RSS则用于发布网站更新。Web服务特点是自包含、自描述,基于开放协议,可重用且能连接现有软件。WSDL文档包含`types`、`message`、`portType`和`binding`元素,定义服务操作和协议。SOAP协议规定消息格式,通过HTTP等传输。
561 1
|
7月前
|
XML JSON JavaScript
Java中XML和JSON的比较与应用指南
本文对比了Java中XML和JSON的使用,XML以自我描述性和可扩展性著称,适合结构复杂、需验证的场景,但语法冗长。JSON结构简洁,适用于轻量级数据交换,但不支持命名空间。在Java中,处理XML可使用DOM、SAX解析器或XPath,而JSON可借助GSON、Jackson库。根据需求选择合适格式,注意安全、性能和可读性。
96 0
|
7月前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
114 0
|
7月前
|
XML 安全 API
Python读写XML文件:深入解析与技术实现
Python读写XML文件:深入解析与技术实现
235 0