热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

1.布局代码:<LinearLayoutxmlns:androandroid:layout
1.布局代码:
"http://schemas.android.com/apk/res/android"
android:layout_hljs-string">"match_parent"
android:layout_hljs-string">"match_parent"
android:background="@android:color/white"
android:orientation="vertical" >

android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dip"
android:text="学生管理系统"
android:textColor="#99CCFF"
android:textSize="23sp" />

android:layout_hljs-string">"fill_parent"
android:layout_hljs-string">"wrap_content"
android:layout_marginTop="5dip"
android:padding="5dip" >

android:id="@+id/tv_name"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:paddingLeft="15dip"
android:paddingRight="15dip"
android:text="姓名"
android:textSize="18sp" />

android:id="@+id/tv_sex"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:layout_marginLeft="5dip"
android:layout_toRightOf="@id/tv_name"
android:paddingLeft="15dip"
android:paddingRight="15dip"
android:text="性别"
android:textSize="18sp" />

android:id="@+id/tv_age"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:layout_marginLeft="5dip"
android:layout_toRightOf="@id/tv_sex"
android:paddingLeft="15dip"
android:paddingRight="15dip"
android:text="年龄"
android:textSize="18sp" />

android:id="@+id/et_name"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:layout_alignLeft="@id/tv_name"
android:layout_alignRight="@id/tv_name"
android:layout_below="@id/tv_name"
android:singleLine="true" />

android:id="@+id/et_sex"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:layout_alignLeft="@id/tv_sex"
android:layout_alignRight="@id/tv_sex"
android:layout_below="@id/tv_sex"
android:singleLine="true" />

android:id="@+id/et_age"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"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" />

android:id="@+id/btn_add_student"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:layout_alignBaseline="@id/et_age"
android:layout_toRightOf="@id/et_age"
android:text="添加学生"
android:textSize="20sp" />


android:layout_hljs-string">"fill_parent"
android:layout_hljs-string">"wrap_content"
android:layout_weight="1" >

android:id="@+id/ll_student_list"
android:layout_hljs-string">"fill_parent"
android:layout_hljs-string">"fill_parent"
android:layout_margin="1dip"
android:orientation="vertical"
android:padding="5dip" >



android:layout_hljs-string">"fill_parent"
android:layout_hljs-string">"wrap_content"
android:layout_marginTop="5dip"
android:orientation="horizontal" >

android:id="@+id/btn_save"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:layout_weight="1"
android:text="保存数据"
android:textSize="20sp" />

android:id="@+id/btn_restore"
android:layout_hljs-string">"wrap_content"
android:layout_hljs-string">"wrap_content"
android:layout_weight="1"
android:text="恢复数据"
android:textSize="20sp" />



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 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();
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();
}
}

推荐阅读
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 装饰者模式(Decorator):一种灵活的对象结构设计模式
    装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • Android 自定义 RecycleView 左滑上下分层示例代码
    为了满足项目需求,需要在多个场景中实现左滑删除功能,并且后续可能在列表项中增加其他功能。虽然网络上有很多左滑删除的示例,但大多数封装不够完善。因此,我们尝试自己封装一个更加灵活和通用的解决方案。 ... [详细]
  • Android开发技巧:使用IconFont减少应用体积
    本文介绍如何在Android应用中使用IconFont来显示图标,从而有效减少应用的体积。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
author-avatar
囡囡需要嗳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有