1、基于Android教务信息管理系统摘 要:针对目前高校教务信息系统的不足,提出一种基于Android的教务信息查询管理系统,它不仅可以帮助师生查询常用信息,同时系统也提供学生选课、上课提醒等实用的辅助功能,为本校大学生使用教务系统提供便利.该系统充分利用Android平台的功能特点,采用Http请求方式完美实现手机端和服务器数据通信,利用jsoup和sax等方法进行数据解析处理,同时也对界面进行精心的设计,增强用户的体验.关键词:Android;教务信息管理系统;手机客户端;UIAcademic Information Management System based on AndroidAbs
2、tract:For less than the current university educational information systems, the Senate proposed a Android-based information system, which can be used not only to help students and teachers query information, and the system also provides student enrollment, school reminders and other useful auxiliary
3、 functions, dean of the University Students use The system provides convenience. The system features full advantage of the Android platform, using Http request method to achieve the perfect mobile client and server data communication using jsoup and sax and other methods of data analysis processing,
4、 but also on the interface carefully designed to enhance the user experience.Keywords:Android;Academic Information Management System;Mobile client;UI; 目录第一章绪论11。1 课题背景11。2 安卓平台简介11.2。1 安卓平台特色介绍21.2。2 安卓系统编程语言21。3 安卓开发的现状3第二章系统开发环境与相关技术32.1 系统开发的环境32。2 系统开发软件的简介42。2.1 Eclipse的简介42。2.2其他软件的简介42。3安卓环境的
5、搭建52。3。1 软件下载准备52。3。2 JDK安装52。3.3 Android SDK安装52。3.4 ADT安装52.3.5 创建AVD62.4 系统开发编程语言的简介6第三章系统需求分析及概要设计83。1 系统需求83。2 可行性分析83。3 系统概要设计83。3。1 系统的功能模块说明83.3.2 系统功能结构图9第四章系统详细设计104.1 登录功能与实现104.1。1 登录界面104.1。2 登录按钮监听器124。1。3 新开线程124。1。4 提交验证信息134。1。5 Activity响应判断134。2 程序主页面实现144。2.1 主界面的头部菜单栏144.2.2页面跳转1
6、54。2。3通过WebView显示信息184。3 选课功能实现194。3。1页面设计204.3。2开辟新线程214.3.3用handler更新UI224.3。4用户点击事件224。4 公共类234。4。1 XML文件解析234。4。2 下载服务器返回数据254。4。3 保存用户状态254.4。4 HTML文件解析27第五章总结29参考文献31II第一章 绪论1。1 课题背景当今社会是信息社会,人们无论何时、无论何地都是在与信息打交道,您阅读的报纸是信息、看到的广告是信息、电视传播的是信息、上网浏览的是信息,当代人简直生活在“信息海洋中。这么多的信息哪些是有用的,哪些是无用的,人们在信息丰富的社
7、会中,难免会忘记一些重要信息,有时会掉一个寻呼机,有时会掉一个电话本或笔记本什么的,这些“信息载体”也许包含着重要的个人信息。如何将这些有用的信息存储起来避免忘记或丢失,如何对这些有用信息进行有序地组织、管理以资对生活决策提供帮助,这正是信息管理软件要解决的问题.进入21世纪以来,无所不在的计算将打破传统意义上的计算机概念:使用更方便、移动更容易、功能更多样化的各种具有计算机功能的设备大量出现,并且在需要时,可以随时通过无线方式连接到移动数据通信网络中,以便高效地交换信息和获得各种服务。这种设备人们称之为无线设备。移动设备最根本的特征是移动性,即能够利用无线电波、微波或红外线等传输介质允许通信
8、中的设备在一定范围内自由移动,其位置不受束缚,从而实现通信双方至少有一方在移动中进行信息传输和交换的目的。移动设备从产生到现在的历史并不长,然而其发展速度却远远超出人们的预料.现如今,移动设备大行其道,全球有超过十亿部移动电话正在被使用,并且这个数目正在逐渐增加。在除美国之外的每个发达国家,拥有手机的人数比拥有计算机的人数更多。而目前,随着移动设备越来越普及及移动硬件的提升,移动设备的功能越来越完善,移动设备的系统平台也日渐火热起来.目前国内最常见的移动开发平台有Symbian,iPhone,Windows Phone 以及Android.如今国内外都有非常多的Android 系统的用户.自从
9、2011年第一季度,Android在全球份额首次超过Symbian,跃居全球第一.截止2012年2月据,Android占据全球智能手机操作系统市场52。5%的份额,中国市场占有率为68.4%。1考虑到如今手机系统的发展现状,以及Android平台系统自身所拥有的优势。因此,基于安卓平台开发一款手机应用软件具有较大的意义和可行性。1。2 安卓平台简介Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为A
10、ndroid 4.0 Ice Cream Sandwich (冰激凌三明治) 以及还在测试中的Android 5。0Jelly Bean(果冻豆).1.2。1 安卓平台特色介绍1。开放性在优势方面,Android平台首先就是其开放性,开放的平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更大竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。2。
11、挣脱运营商的束缚在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商的控制。自从iPhone上市,用户可以更加方便地连接网络,运营商的制约减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈.3。丰富的硬件选择这一点还是与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪,功能特色各具的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容。好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软
12、件带到iPhone上使用、联系人等资料更是可以方便地转移.4。不受任何限制的开发商Android平台提供给第三方开发商一个十分宽泛、自由的环境。因此不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件会诞生.但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android难题之一。1。2。2 安卓系统编程语言在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C+作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:python、lua、tcl、php等等),还有其他诸如:Qt(qt for androi
13、d)、Mono(mono for android)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C作为编程语言来开发应用程序.另外,谷歌还在2009年特别发布了针对初学者的Android Simple语言,该语言类似Basic语言.而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发.在Android系统底层方面,Android使用C/C+作为开发语言。而Android应用层的开发,基本上全部是采用Java开发。但和我们一般互联网上应用的J
14、AVA还是有些区别的。此“JAVA”是google自己做的一套实现来实现,和SUN的底层是不太一样的。不过对开发应用区别不大。1。3 安卓开发的现状目前国内的Android开发还是主要以应用开发为主,主要分成3类:为企业开发应用、开发通用应用(放到Android Market或者其他App Market 销售)以及游戏开发(放到 Android Market 或者其他 App Market 销售).第一类开发者一般身处规模较大的公司,这些公司主要为自有品牌或者其他品牌设计手机或者平板电脑的总体方案。除了根据需求对系统进行定制外,更多的工作在于为这些系统编写定制的应用。第二类开发者,一般处于创业
15、型公司或者是独立开发者,他们的盈利方式主要是2种:为国外公司进行外包开发,或者通过Google 的移动广告(AdMob)通过广告点击分成.而理论上的通过付费下载的形式来盈利的,现在国内鲜见成功者.第三类开发者,目前和第二类开发者类似。下图是开发者提交的应用和游戏的数目所占的比例图, 从中也可以看出应用开发数目远超游戏开发.图1。1 开发者提交应用和游戏比例图第二章 系统开发环境与相关技术2。1 系统开发的环境Android 的上层应用程序是用Java 语言开发,同时还需要基于Dalvik虚拟机,所以,Google公司推荐使用主流的Java继承开发环境Eclipse。只有Eclipse还不够,
16、因为是使用 Java 语言进行开发, 还应该有由SUN公司提供的Java SDK(其中包括JRE:Java Runtime Environment)。此外,Android的应用程序开发和Java开发有较大区别的,所以还需要有Google提供的Android SDK.同时,还需要在 Eclipse安装ADT,为 Android开发提供开发工具的升级或者变更,是Eclipse 下开发工具的升级下载的工具.简言之,需要以下软件,才能搭建 Android 开发环境,从而进行Android应用程序的开发。(1) Eclipse (2) JDK(3) Android SDK(4) ADT(Android
17、Development Tools)2。2 系统开发软件的简介2。2.1 Eclipse的简介Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK). 虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plugin Development Environment,PDE),这个组件主
18、要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+ 和 COBOL 等编程语言的插件已经可用,或预计将会推出.Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统.2。2.2其他软件的简介
19、(1)JDKJDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK.JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步.而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。(2) Android SDKSDK:(software development kit)软件开发工具包.被软
20、件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合. 因此,Android SDK 指的既是Android专属的软件开发工具包.(3)ADT(Android Development Tools)目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具. 2.3安卓环境的搭建2.3。1 软件下载准备分别下载 JDK、Eclipse、Android SDK,并首先解压Eclipse完成安装。2.3。2 JDK安装首先按
21、提示完成SDK安装,然后设置环境变量(非必须)。1.我的电脑-属性-高级环境变量系统变量中添加以下环境变量: 2。JAVA_HOME值为:E:AndroidJavajdk1。6。0_21(我所安装JDK的目录) 3.CLASSPATH值:。;%JAVA_HOMElibtools.jar;JAVA_HOMElibdt。jar;JAVA_HOME%bin;4.Path: 在开始追加 %JAVA_HOMEbin; 安装完成之后,检查JDK是否安装成功。打开cmd窗口,输入java version 查看JDK的版本信息。出现下面的画面表示安装成功了,如图21:图21 安卓环境设置JDK效果测试图2。3
22、.3 Android SDK安装下载完成后解压到任意路径运行SDK Setup。exe,点击Available Packages。选择希望安装的SDK及其文档或者其它包,按需点击下面选项(开始下载安装所选包 )在用户变量中新建PATH值为:Android SDK中的tools绝对路径(本机为D:AndroidDevelopandroidsdk-windowstools)。 完成按“确定”后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。 运行 android h 出现参数选择,表明安装成功.2.3。4 ADT安装打开 Eclipse,进入菜单中的 Help” I
23、nstall New Software 点击Add。按钮,弹出对话框要求输入Name和Location:Name自己随便取,Location输入http:/dl-ssl。google。com/android/eclipse。确定返回后,在work with后的下拉列表中选择我们刚才添加的ADT,点击下面出现的Developer Tools,展开它会有Android DDMS和Android Development Tool,勾选他们,然后按步骤完成.完成之后:选择Window Preferences。 在左边的面板选择Android,然后在右侧点击Browse.。.并选中SDK路径,本机为:
24、E:Androidandroid-sdk-windows点击Apply。配置完成. 2。3.5 创建AVD为使Android应用程序可以在模拟器上运行,必须创建AVD。1、在Eclipse中。选择Windows Android SDK and AVD Manager 2、点击左侧面板的Virtual Devices,再右侧点击New 3、填入Name,选择Target的API,SD Card大小任意,Skin随便选,Hardware目前保持默认值 4、点击Create AVD即可完成创建AVD 综上一切完成后安卓环境搭建完成.2.4 系统开发编程语言的简介Java是一种简单的,跨平台的,面向对
25、象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。Java 编程语言的风格十分接近C、C+语言.Java是一个纯的面向对象的程序设计语言,它继承了 C+ 语言面向对象技术的核心,Java舍弃了C +语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和
26、自动装/拆箱等语言特性。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 1。4。2 发布后,Java 的执行速度有了大幅提升.与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术.全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量是
27、Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同. Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。 Java 平台是基于 Java 语言的平台.。 Java的特点:1。平台无关性 平台无关性是指Java能运行于不同的平台。Java引进虚拟机 原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与 机器无关,Java虚拟机(Java Virtual Machine)是建立
28、在硬件和操作系统之上,实现Java二进制代码的解释执行功能, 提供于不同平台的接口的。 2。安全性 Java的编程类似C+,学习过C+的读者将很快掌握Java的精髓.Java舍弃了C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针侵入系统.Java对程序提供了安全管理器,防止程序的非法访问。 3。面向对象 Java吸取了C+面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性.类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。Java提供了众多的
29、一般对象的类,通过继承即可使用父类的方法。在Java中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。Java提供的Object类及其子类的继承关系如同一棵倒立的树形,根类为Object类,Object类功能强大,经常会使用到它及其它派生的子类。 4。分布式 Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法.这使得程序员使用网络上的文件和使用本机文件一样容易. 5。健壮性 Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误.Java自己操纵内存减少了内存出错的可能性.Java还实现了
30、真数组,避免了覆盖数据的可能,这些功能特征大大提高了开发Java应用程序的周期.并且Java还提供了Null指针检测、数组边界检测、异常出口、Byte code校验等功能. 6。解释型 我们知道C,C+等语言,都是针对CPU芯片进行编译,生成机器代码,该代码的运行就和特定的CPU有关。Java不像C或C+,它不针对CPU芯片进行编译,而是把程序编译成称为字节码的一种“中间代码。字节码是很接近机器码的文件,可以在提供了java虚拟机(JVM)的任何系统上被解释执行。 7。动态 JAVA程序的基本组成单元就是类,有些类是自己编写的,有些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可
31、以在分部环境中动态的维护程序及分类,而不像C+那样,没档期类库升级以后,如果想让程序具有新类库提供的功能,就需要修改程序,重新编译。第三章 系统需求分析及概要设计3.1系统需求该系统是一个基于学校选课系统针对学生的手机客户端。它是为本软件的持有者提供对选课系统的一些功能进行基本操作。它包括成绩查询,课表查询,本学期所选课程查询,学籍查询,考试信息查询,修改密码,选课等操作。本软件为在校学生方便快捷的使用学校选课系统提供一种途径。3。2 可行性分析通过对学校选课系统整体研究分析,本学校选课系统不提供对外接口,所以不能独立存在,只能依附于选课系统jsp页面。通过对选课系统http请求处理研究发现,
32、只要提供正确参数,系统后台servlet会返回相应Xml或Html页面。通过对返回数据的处理,基本可以实现上述功能。3。3 系统概要设计3.3。1 系统的功能模块说明(1)登录模块:作为系统启动后第一个界面,其中包括用户名密码输入(其中用户名为学生学号)。登录成功后自动保存用户名与密码,有利于提高用户体验.最后提供服务器验证信息返回提示,如果验证通过提示后跳转页面,如果失败则提示重新登录.(2)系统主界面:用户登录后跳转到此界面,该界面用标签方式同时加载3个页面在手机,用户可通过下方按钮选择当前需要的界面,提高手机屏幕所显示信息量,于软件运行速度.(3)数据解析模块:用于处理服务器返回数据.(
33、4)数据下载模块:利用HTTP请求接收返回数据3。3。2 系统功能结构图在程序设计分析的基础上,结合实际情况,得出本程序的功能模块结构图。在结构图中包括了功能模块的表示及其中部分功能的实现原理。1、总体设计选课系统课表查询课程查询成绩查询学籍查询选课修改密码首先是一个总的功能模块的结构图,其中包括了系统设计时的总体功能概括,如图3.1。图 3。1 整体功能示意2、系统流程图跟据需求,程序流程如下:用户登录后加载主框架,通过框架加载常用查询页面与服务器授权才能使用的查询页面,如选课,选课查询,考试查询等。整体流程如图32.。学生选课系统登录主界面常用查询授权查询关于/退出课表查询课程查询成绩查询
34、学籍信息修改密码选课考试信息查询图 3。2 软件流程3、登录模块设计学生选课系统登录生成URL判断登录状态HttpDownloader返回XML验证数据解析XML数据返回验证数据UI线程新开线程登录成功并跳转01登录模块由于要在网络上取验证数据,所耗时间不确定,为不使主界面在验证时出现假死现象,所以必须新开线程,和UI所在线程分离,实现异步登录。具体流程如图3-3图 3-3 登录数据流程第四章 系统详细设计4.1登录功能与实现4。1。1登录界面本界面采用线性布局LinearLayout将标签,文本框,按钮,选项框组织排列。值得注意的是这里的用户名输入框使用了AutoCompleteTextVi
35、ew控件而不是普通的EditText,这样做是为了使程序可以使用保存下的用户名密码,并且在开始输入时可以提示用户.这样做可以减少用户重复输入,有助提高软件可操作性。首先建立好Android工程,在工程下的res/layout下建立一个名为Login的空xml文件。然后按照设计将布局完成。结果如下图4-1所示。图41 登录界面然后在工程src目录下所对应Activity中创建控件,并用findViewById()方法得到所创建的控件ID并转换成相应控件,实现代码如下:cardNumAuto = (AutoCompleteTextView) findViewById(R.id。cardNumAut
36、o);passwordET = (EditText) findViewById(R。id.passwordET);logBT = (Button) findViewById(R。id。logBT);sp = this。getSharedPreferences(”passwordFile”, MODE_PRIVATE);savePasswordCB = (CheckBox) findViewById(R。id。savePasswordCB);savePasswordCB。setChecked(true);cardNumAuto.setThreshold(1);passwordET。setInpu
37、tType(InputType.TYPE_CLASS_TEXT InputType。TYPE_TEXT_VARIATION_PASSWORD);其中savePassword为多选框,只有这个值为true时才会保存密码。当用户登录过之后,下次登录会在输入第一个字符时开始提示用户。用户名密码保存使用SharedPreferences,Android自带的微型数据存储类,SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/shared_prefs目录下。其中数据数据适配器实现代码如下:new TextWatcher() public void o
38、nTextChanged(CharSequence s, int start, int before,int count) String allUserName = new Stringsp.getAll().size();allUserName = sp。getAll().keySet()。toArray(new String0);ArrayAdapterString adapter = new ArrayAdapterString(Login_Activity。this,android.R。layout.simple_dropdown_item_1line,allUserName);car
39、dNumAuto.setAdapter(adapter);public void beforeTextChanged(CharSequence s, int start, int count,int after) public void afterTextChanged(Editable s) passwordET。setText(sp.getString(cardNumAuto.getText()。toString(), ”);4。1。2 登录按钮监听器当用户名密码输入完成点击登录将会执行登录操作,所以,必须给登录按钮添加监听器,用来监听点击事件。具体流程为,得到用户输入的用户名和密码,并新
40、开线程。并在用提示框通知用户现在正在验证用户信息。具体实现代码如下:logBT.setOnClickListener(new OnClickListener() public void onClick(View v) cardNumStr = cardNumAuto。getText()。toString();passwordStr = passwordET。getText()。toString();mDialog = new ProgressDialog(Login_Activity。this);mDialog。setIcon(DEFAULT_KEYS_DISABLE);mDialog.set
41、Title(”登陆”);mDialog。setMessage(正在登陆服务器,请稍后。.”);mDialog。show();Thread loginThread = new Thread(new LoginThread());loginThread.start(););4.1。3 新开线程监听器绑定之后,在用户点击登录按钮时将会新开一个线程,所有验证中的操作全部在新线程中执行。新开线程主要用于发送http请求并接收验证信息,之后通知页面显示登录结果实现代码如下所示: class LoginThread implements Runnable public void run() String u
42、sername = cardNumAuto.getText()。toString();String password = passwordET.getText()。toString();ArrayListString userStr = loginServer(username, password);Message msg = handler。obtainMessage();if (!(userStr。get(0).equals(”0”))) msg。what = 1; handler。sendMessage(msg); else if (savePasswordCB。isChecked())
43、 / 登陆成功才保存密码sp。edit()。putString(cardNumStr, passwordStr)。commit();msg.what = 0; handler。sendMessage(msg);新开线程又包含几项对数据的处理工作,以及对返回处理结果,并对当前页面的一些操作。4。1。4 提交验证信息handler为接收返回验证信息并在界面显示登录结果,鉴于本学校服务器返回验证信息为一XML文件,解析后用泛型ArrayList存储,其中第一条为用户名密码验证信息,返回1为验证不通过,返回0为通过,并附加一些用户基本数据作为之后操作参数。其中http请求的URL与数据处理实现代码如下
44、:private ArrayListString loginServer(String username, String password) ArrayListString userStr=null; String userName=username; String passWord=password;String path=”127。0。0。1:8080/webdu/loginservlet?action=1ucode=+userName+&upwd=”+passWord+”&utype=S”;path = path.replaceAll(”s, ”); HttpDownloader htt
45、pdownloader = new HttpDownloader(); String json = new String( httpdownloader.download(path));try userStr = Method.xmlParse( json);catch (Exception e) return userStr; 由于在Android中,在输入完成后自动添加上一个空格,但http请求URL中,服务器接收时没有控制,所以在这里得对生成的URL进行处理,path = path。replaceAll(s”, )为去掉字符串中所有空格。该方法返回一个ArrayList,这个ArrayL
46、ist是可变长数组,为方便返回数据的可操作性.4。1。5 Activity响应判断将服务器返回的数据解析后,我们就知道了这次登录操作中到底有没有通过服务器验证,但是在新线程中下载解析后的数据我们无法直接在Activity中使用。所以当前Activity必须在新线程执行结束前处于等待状态,并且随时准备响应。新开线程与Activity不处于同一线程,不能直接对Activity进行操作。所以这里必须有一个Handler来接受新线程发送的数据, 并用此数据配合主线程更新Activity。前面的新开线程中,我们判断了服务器返回值是否为0,并为一个状态量设置了值,这个值就是Handler所接受的值。通过新线程的值来控制UI更新,实现代码如下:Handler handler = new Handler()public void handleMessage(Message msg) switch(msg。what) case 0: mDialog.cancel(); Toast.makeText(getApplicationContext(), ”登录成功, Toast.LENGTH_SHORT)。show(); Intent intent = new Intent(); intent。setClass(Login_Activity。this, Main_B