android(12)(简单学生管理系统,包括文件写入SD卡,pull解析xml文件等)

来源:互联网 发布:csgo视频设置知乎 编辑:程序博客网 时间:2024/06/12 19:42
1.布局代码:<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>entities类:public class Student {    private String name;    private String sex;    private Integer age;    public Student(String name, String sex, Integer age) {        super();        this.name = name;        this.sex = sex;        this.age = age;    }    public Student() {        super();        // TODO Auto-generated constructor stub    }    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 + "]";    }业务逻辑代码:public class MainActivity extends Activity 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";//数据保存在SD卡的一个student的xml文件中。    }    //点击事件    @Override    public void onClick(View v) {        switch (v.getId()) {        case R.id.btn_save://如果点击的是保存数据按钮            if(studentList.size() > 0) {                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解析)    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;    }    //刷新学生集合(把添加的学生显示在ScrollView中)    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);        }    }    //保存数据到SD卡。    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();        }    }
0 0