![基于Android教务信息管理系统样本_第1页](http://file4.renrendoc.com/view12/M02/2B/25/wKhkGWX4nHCADsntAAG9IVFS29k089.jpg)
![基于Android教务信息管理系统样本_第2页](http://file4.renrendoc.com/view12/M02/2B/25/wKhkGWX4nHCADsntAAG9IVFS29k0892.jpg)
![基于Android教务信息管理系统样本_第3页](http://file4.renrendoc.com/view12/M02/2B/25/wKhkGWX4nHCADsntAAG9IVFS29k0893.jpg)
![基于Android教务信息管理系统样本_第4页](http://file4.renrendoc.com/view12/M02/2B/25/wKhkGWX4nHCADsntAAG9IVFS29k0894.jpg)
![基于Android教务信息管理系统样本_第5页](http://file4.renrendoc.com/view12/M02/2B/25/wKhkGWX4nHCADsntAAG9IVFS29k0895.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于Android教务信息管理系统摘要:针对当前高校教务信息系统局限性,提出一种基于Android教务信息查询管理系统,它不但可以协助师生查询惯用信息,同步系统也提供学生选课、上课提示等实用辅助功能,为本校大学生使用教务系统提供便利。该系统充分运用Android平台功能特点,采用Http祈求方式完美实现手机端和服务器数据通信,运用jsoup和sax等办法进行数据解析解决,同步也对界面进行精心设计,增强顾客体验。核心词:Android;教务信息管理系统;手机客户端;UIAcademicInformationManagementSystembasedonAndroidAbstract:Forlessthanthecurrentuniversityeducationalinformationsystems,theSenateproposedaAndroid-basedinformationsystem,whichcanbeusednotonlytohelpstudentsandteachersqueryinformation,andthesystemalsoprovidesstudentenrollment,schoolremindersandotherusefulauxiliaryfunctions,deanoftheUniversityStudents'useThesystemprovidesconvenience.ThesystemfeaturesfulladvantageoftheAndroidplatform,usingHttprequestmethodtoachievetheperfectmobileclientandserverdatacommunicationusingjsoupandsaxandothermethodsofdataanalysisprocessing,butalsoontheinterfacecarefullydesignedtoenhancetheuserexperience.Keywords:Android;AcademicInformationManagementSystem;Mobileclient;UI;目录第一章绪论 11.1课题背景 11.2安卓平台简介 11.2.1安卓平台特色简介 21.2.2安卓系统编程语言 21.3安卓开发现状 3第二章系统开发环境与有关技术 32.1系统开发环境 32.2系统开发软件简介 42.2.1Eclipse简介 42.2.2其她软件简介 42.3安卓环境搭建 52.3.1软件下载准备 52.3.2JDK安装 52.3.3AndroidSDK安装 52.3.4ADT安装 52.3.5创立AVD 62.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.5Activity响应判断 134.2程序主页面实现 144.2.1主界面头部菜单栏 144.2.2页面跳转 154.2.3通过WebView显示信息 184.3选课功能实现 194.3.1页面设计 204.3.2开辟新线程 214.3.3用handler更新UI 224.3.4顾客点击事件 224.4公共类 234.4.1XML文献解析 234.4.2下载服务器返回数据 254.4.3保存顾客状态 254.4.4HTML文献解析 27第五章总结 29参照文献 31第一章绪论1.1课题背景当今社会是信息社会,人们无论何时、无论何地都是在与信息打交道,您阅读报纸是信息、看到广告是信息、电视传播是信息、上网浏览是信息,当代人简直生活在“信息海洋”中。这样多信息哪些是有用,哪些是无用,人们在信息丰富社会中,难免会忘掉某些重要信息,有时会掉一种寻呼机,有时会掉一种电话本或笔记本什么,这些“信息载体”也许包括着重要个人信息。如何将这些有用信息存储起来避免忘掉或丢失,如何对这些有用信息进行有序地组织、管理以资对生活决策提供协助,这正是信息管理软件要解决问题。进入21世纪以来,无所不在计算将打破老式意义上计算机概念:使用更以便、移动更容易、功能更多样化各种具备计算机功能设备大量浮现,并且在需要时,可以随时通过无线方式连接到移动数据通信网络中,以便高效地互换信息和获得各种服务。这种设备人们称之为无线设备。移动设备最主线特性是移动性,即可以运用无线电波、微波或红外线等传播介质容许通信中设备在一定范畴内自由移动,其位置不受束缚,从而实现通信双方至少有一方在移动中进行信息传播和互换目。移动设备从产生到当前历史并不长,然而其发展速度却远远超过人们预料。现如今,移动设备大行其道,全球有超过十亿部移动电话正在被使用,并且这个数目正在逐渐增长。在除美国之外每个发达国家,拥有手机人数比拥有计算机人数更多。而当前,随着移动设备越来越普及及移动硬件提高,移动设备功能越来越完善,移动设备系统平台也日渐火热起来。当前国内最常用移动开发平台有Symbian,iPhone,WindowsPhone以及Android。如今国内外均有非常多Android系统顾客。自从第一季度,Android在全球份额初次超过Symbian,跃居全球第一。截止2月据,Android占据全球智能手机操作系统市场52.5%份额,中华人民共和国市场占有率为68.4%。[1]考虑到如今手机系统发呈现状,以及Android平台系统自身所拥有优势。因而,基于安卓平台开发一款手机应用软件具备较大意义和可行性。1.2安卓平台简介Android一词本义指“机器人”,同步也是Google于11月5日宣布基于Linux平台开源手机操作系统名称,该平台由操作系统、中间件、顾客界面和应用软件构成,号称是首个为移动终端打造真正开放和完整移动软件。当前,最新版本为Android4.0IceCreamSandwich(冰激凌三明治)以及还在测试中Android5.0JellyBean(果冻豆)。1.2.1安卓平台特色简介1.开放性在优势方面,Android平台一方面就是其开放性,开放平台容许任何移动终端厂商加入到Android联盟中来。明显开放性可以使其拥有更多开发者,随着顾客和应用日益丰富,一种崭新平台也将不久走向成熟。开发性对于Android发展而言,有助于积累人气,这里人气涉及消费者和厂商,而对于消费者来讲,最大受益正是丰富软件资源。开放平台也会带来更大竞争,如此一来,消费者将可以用更低价位购得心仪手机。2.挣脱运营商束缚在过去很长一段时间,特别是在欧美地区,手机应用往往受到运营商制约,使用什么功能接入什么网络,几乎都受到运营商控制。自从iPhone上市,顾客可以更加以便地连接网络,运营商制约减少。随着EDGE、HSDPA这些2G至3G移动网络逐渐过渡和提高,手机随意接入网络已不是运营商口中笑谈。3.丰富硬件选取这一点还是与Android平台开放性有关,由于Android开放性,众多厂商会推出千奇百怪,功能特色各具各种产品。功能上差别和特色,却不会影响到数据同步、甚至软件兼容。好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同步还可将Symbian中先进软件带到iPhone上使用、联系人等资料更是可以以便地转移。4.不受任何限制开发商Android平台提供应第三方开发商一种十分宽泛、自由环境。因而不会受到各种条条框框阻扰,可想而知,会有多少新颖别致软件会诞生。但也有其两面性,血腥、暴力、情色方面程序和游戏如何控制正是留给Android难题之一。1.2.2安卓系统编程语言在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其她各种脚本语言进行编程(如:python、lua、tcl、php等等),尚有其她诸如:Qt(qtforandroid)、Mono(monoforandroid)等某些知名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序。此外,google还在特别发布了针对初学者AndroidSimple语言,该语言类似Basic语言。而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。在Android系统底层方面,Android使用C/C++作为开发语言。而Android应用层开发,基本上所有是采用Java开发。但和咱们普通互联网上应用JAVA还是有些区别。此“JAVA”是google自己做一套实现来实现,和SUN底层是不太同样。但是对开发应用区别不大。1.3安卓开发现状当前国内Android开发还是重要以应用开发为主,重要提成3类:为公司开发应用、开发通用应用(放到AndroidMarket或者其她AppMarket销售)以及游戏开发(放到AndroidMarket或者其她AppMarket销售)。第一类开发者普通身处规模较大公司,这些公司重要为自有品牌或者其她品牌设计手机或者平板电脑总体方案。除了依照需求对系统进行定制外,更多工作在于为这些系统编写定制应用。第二类开发者,普通处在创业型公司或者是独立开发者,她们赚钱方式重要是2种:为国外公司进行外包开发,或者通过Google移动广告(AdMob)通过广告点击提成。而理论上通过付费下载形式来赚钱,当前国内鲜见成功者。第三类开发者,当前和第二类开发者类似。下图是开发者提交应用和游戏数目所占比例图,从中也可以看出应用开发数目远超游戏开发。图1.1开发者提交应用和游戏比例图第二章系统开发环境与有关技术2.1系统开发环境Android上层应用程序是用Java语言开发,同步还需要基于Dalvik虚拟机,因此,Google公司推荐使用主流Java继承开发环境Eclipse。只有Eclipse还不够,由于是使用Java语言进行开发,还应当有由SUN公司提供JavaSDK(其中涉及JRE:JavaRuntimeEnvironment)。此外,Android应用程序开发和Java开发有较大区别,因此还需要有Google提供AndroidSDK。同步,还需要在Eclipse安装ADT,为Android开发提供开发工具升级或者变更,是Eclipse下开发工具升级下载工具。简言之,需要如下软件,才干搭建Android开发环境,从而进行Android应用程序开发。(1)Eclipse(2)JDK(3)AndroidSDK(4)ADT(AndroidDevelopmentTools)2.2系统开发软件简介2.2.1Eclipse简介Eclipse是一种开放源代码、基于Java可扩展开发平台。就其自身而言,它只是一种框架和一组服务,用于通过插件组件构建开发环境。幸运是,Eclipse附带了一种原则插件集,涉及Java开发工具(JavaDevelopmentKit,JDK)。虽然大多数顾客很乐于将Eclipse当作Java集成开发环境(IDE)来使用,但Eclipse目的却不但限于此。Eclipse还涉及插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件重要针对但愿扩展Eclipse软件开发人员,由于它容许她们构建与Eclipse环境无缝集成工具。由于Eclipse中每样东西都是插件,对于给Eclipse提供插件,以及给顾客提供一致和统一集成开发环境而言,所有工具开发人员都具备同等发挥场合。这种平等和一致性并不但限于Java开发工具。尽管Eclipse是使用Java语言开发,但它用途并不限于Java语言;例如,支持诸如C/C++和COBOL等编程语言插件已经可用,或预测将会推出。Eclipse框架还可用来作为与软件开发无关其她应用程序类型基本,例如内容管理系统。2.2.2其她软件简介(1)JDKJDK(JavaDevelopmentKit)是SunMicrosystems针对Java开发员产品。自从Java推出以来,JDK已经成为使用最广泛JavaSDK。JDK是整个Java核心,涉及了Java运营环境,Java工具和Java基本类库。JDK是学好Java第一步。而专门运营在x86平台Jrocket在服务端运营效率也要比SunJDK好诸多。从SUNJDK5.0开始,提供了泛型等非常实用功能,其版本也不断更新,运营效率得到了非常大提高。(2)AndroidSDKSDK:(softwaredevelopmentkit)软件开发工具包。被软件开发工程师用于为特定软件包、软件框架、硬件平台、操作系统等建立应用软件开发工具集合。因而,AndroidSDK指既是Android专属软件开发工具包。(3)ADT(AndroidDevelopmentTools)当前Android开发所用开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具升级或者变更,简朴理解为在Eclipse下开发工具升级下载工具。2.3安卓环境搭建2.3.1软件下载准备分别下载JDK、Eclipse、AndroidSDK,并一方面解压Eclipse完毕安装。2.3.2JDK安装一方面按提示完毕SDK安装,然后设立环境变量(非必要)。1.我电脑->属性->高档->环境变量->系统变量中添加如下环境变量:2.JAVA_HOME值为:E:\Android\Java\jdk1.6.0_21(我所安装JDK目录)3.CLASSPATH值:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;4.Path:在开始追加%JAVA_HOME%\bin;安装完毕之后,检查JDK与否安装成功。打开cmd窗口,输入java–version查看JDK版本信息。浮现下面画面表达安装成功了,如图2-1:图2-1安卓环境设立JDK效果测试图2.3.3AndroidSDK安装下载完毕后解压到任意途径运营SDKSetup.exe,点击AvailablePackages。选取但愿安装SDK及其文档或者其他包,按需点击下面选项(开始下载安装所选包)在顾客变量中新建PATH值为:AndroidSDK中tools绝对途径(本机为D:\AndroidDevelop\android-sdk-windows\tools)。完毕按“拟定”后,重新启动计算机。重启计算机后来,进入cmd命令窗口,检查SDK是不是安装成功。运营android–h浮现参数选取,表白安装成功。2.3.4ADT安装打开Eclipse,进入菜单中"Help"->"InstallNewSoftware"点击Add...按钮,弹出对话框规定输入Name和Location:Name自己随便取,Location输入。拟定返回后,在workwith后下拉列表中选取咱们刚才添加ADT,点击下面浮现DeveloperTools,展开它会有AndroidDDMS和AndroidDevelopmentTool,勾选她们,然后按环节完毕。完毕之后:选取Window>Preferences...在左边面板选取Android,然后在右侧点击Browse...并选中SDK途径,本机为:E:\Android\android-sdk-windows点击Apply。配备完毕。2.3.5创立AVD为使Android应用程序可以在模仿器上运营,必要创立AVD。1、在Eclipse中。选取Windows>AndroidSDKandAVDManager2、点击左侧面板VirtualDevices,再右侧点击New3、填入Name,选取TargetAPI,SDCard大小任意,Skin随便选,Hardware当前保持默认值4、点击CreateAVD即可完毕创立AVD综上一切完毕后安卓环境搭建完毕。2.4系统开发编程语言简介Java是一种简朴,跨平台,面向对象,分布式,解释,健壮安全,构造中立,可移植,性能很优秀多线程,动态语言。Java编程语言风格十分接近C、C++语言。Java是一种纯面向对象程序设计语言,它继承了C++语言面向对象技术核心,Java舍弃了C++语言中容易引起错误指针(以引用取代)、运算符重载(operatoroverloading)、多重继承(以接口取代)等特性,增长了垃圾回收器功能用于回收不再被引用对象所占据内存空间,使得程序员不用再为内存管理而担忧。在JavaSE1.5版本中,Java又引入了泛型编程(GenericProgramming)、类型安全枚举、不定长参数和自动装/拆箱等语言特性。Java不同于普通编译执行计算机语言和解释执行计算机语言。它一方面将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上虚拟机来解释执行字节码,从而实现了“一次编译、处处执行”跨平台特性。但是,每次编译执行需要消耗一定期间,这同步也在一定限度上减少了Java程序运营效率。但在J2SE1.4.2发布后,Java执行速度有了大幅提高。与老式程序不同,Sun公司在推出Java之际就将其作为一种开放技术。全球数以万计Java开发公司被规定所设计Java软件必要互相兼容。“Java语言靠群体力量而非公司力量”是Sun公司标语之一,并获得了广大软件开发商认同。这与微软公司所倡导注重精英和封闭式模式完全不同。Sun公司对Java编程语言解释是:Java编程语言是个简朴、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态语言。Java平台是基于Java语言平台。。Java特点:1.平台无关性平台无关性是指Java能运营于不同平台。Java引进虚拟机原理,并运营于虚拟机,实现不同平台Java接口之间。使用Java编写程序能在世界范畴内共享。Java数据类型与机器无关,Java虚拟机(JavaVirtualMachine)是建立在硬件和操作系统之上,实现Java二进制代码解释执行功能,提供于不同平台接口。2.安全性Java编程类似C++,学习过C++读者将不久掌握Java精髓。Java舍弃了C++指针对存储器地址直接操作,程序运营时,内存由操作系统分派,这样可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序非法访问。3.面向对象Java吸取了C++面向对象概念,将数据封装于类中,运用类长处,实现了程序简洁性和便于维护性。类封装性、继承性等关于对象特性,使程序代码只需一次编译,然后通过上述特性重复运用。程序员只需把重要精力用在类和接口设计和应用上。Java提供了众多普通对象类,通过继承即可使用父类办法。在Java中,类继承关系是单一非多重,一种子类只有一种父类,子类父类又有一种父类。Java提供Object类及其子类继承关系犹如一棵倒立树形,根类为Object类,Object类功能强大,经常会使用到它及其他派生子类。4.分布式Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP合同传送和接受信息办法。这使得程序员使用网络上文献和使用本机文献同样容易。5.健壮性Java致力于检查程序在编译和运营时错误。类型检查协助检查出许多开发初期浮现错误。Java自己操纵内存减少了内存出错也许性。Java还实现了真数组,避免了覆盖数据也许,这些功能特性大大提高了开发Java应用程序周期。并且Java还提供了Null指针检测、数组边界检测、异常出口、Bytecode校验等功能。6.解释型咱们懂得C,C++等语言,都是针对CPU芯片进行编译,生成机器代码,该代码运营就和特定CPU关于。Java不像C或C++,它不针对CPU芯片进行编译,而是把程序编译成称为字节码一种“中间代码”。字节码是很接近机器码文献,可以在提供了java虚拟机(JVM)任何系统上被解释执行。7.动态JAVA程序基本构成单元就是类,有些类是自己编写,有些是从类库中引入,而类又是运营时动态装载,这就使得Java可以在分部环境中动态维护程序及分类,而不像C++那样,没档期类库升级后来,如果想让程序具备新类库提供功能,就需要修改程序,重新编译。第三章系统需求分析及概要设计3.1系统需求该系统是一种基于学校选课系统针对学生手机客户端。它是为本软件持有者提供对选课系统某些功能进行基本操作。它涉及成绩查询,课表查询,本学期所选课程查询,学籍查询,考试信息查询,修改密码,选课等操作。本软件为在校学生以便快捷使用学校选课系统提供一种途径。3.2可行性分析通过对学校选课系统整体研究分析,本学校选课系统不提供对外接口,因此不能独立存在,只能依附于选课系统jsp页面。通过对选课系统http祈求解决研究发现,只要提供对的参数,系统后台servlet会返回相应Xml或Html页面。通过对返回数据解决,基本可以实现上述功能。3.3系统概要设计3.3.1系统功能模块阐明(1)登录模块:作为系统启动后第一种界面,其中涉及顾客名密码输入(其中顾客名为学生学号)。登录成功后自动保存顾客名与密码,有助于提高顾客体验。最后提供服务器验证信息返回提示,如果验证通过提示后跳转页面,如果失败则提示重新登录。(2)系统主界面:顾客登录后跳转到此界面,该界面用标签方式同步加载3个页面在手机,顾客可通过下方按钮选取当前需要界面,提高手机屏幕所显示信息量,于软件运营速度。(3)数据解析模块:用于解决服务器返回数据。(4)数据下载模块:运用HTTP祈求接受返回数据3.3.2系统功能构造图在程序设计分析基本上,结合实际状况,得出本程序功能模块构造图。在构造图中涉及了功能模块表达及其中某些功能实现原理。1、总体设计选课系统课表查询课程查询成绩查询选课系统课表查询课程查询成绩查询学籍查询选课修改密码图3.1整体功能示意2、系统流程图跟据需求,程序流程如下:顾客登录后加载主框架,通过框架加载惯用查询页面与服务器授权才干使用查询页面,如选课,选课查询,考试查询等。整体流程如图3-2.。学生选课系统学生选课系统登录主界面惯用查询授权查询关于/退出课表查询课程查询成绩查询学籍信息修改密码选课考试信息查询图3.2软件流程3、登录模块设计学生选课系统登录生成URL判断登录状态学生选课系统登录生成URL判断登录状态HttpDownloader返回XML验证数据解析XML数据返回验证数据UI线程新开线程登录成功并跳转01图3-3登录数据流程第四章系统详细设计4.1登录功能与实现4.1.1登录界面本界面采用线性布局LinearLayout将标签,文本框,按钮,选项框组织排列。值得注意是这里顾客名输入框使用了AutoCompleteTextView控件而不是普通EditText,这样做是为了使程序可以使用保存下顾客名密码,并且在开始输入时可以提示顾客。这样做可以减少顾客重复输入,有助提高软件可操作性。一方面建立好Android工程,在工程下res/layout下建立一种名为Login空xml文献。然后按照设计将布局完毕。成果如下图4-1所示。图4-1登录界面然后在工程src目录下所相应Activity中创立控件,并用findViewById()办法得到所创立控件ID并转换成相应控件,实当代码如下:cardNumAuto=(AutoCompleteTextView)findViewById(R.id.cardNumAuto);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.setInputType(InputType.TYPE_CLASS_TEXT |InputType.TYPE_TEXT_VARIATION_PASSWORD);其中savePassword为多选框,只有这个值为true时才会保存密码。当顾客登录过之后,下次登录会在输入第一种字符时开始提示顾客。顾客名密码保存使用SharedPreferences,Android自带微型数据存储类,SharedPreferences保存数据,其背后是用xml文献存储数据,文献存储在/data/data/<packagename>/shared_prefs目录下。其中数据数据适配器实当代码如下:newTextWatcher(){publicvoidonTextChanged(CharSequences,intstart,intbefore, intcount){ String[]allUserName=newString[sp.getAll().size()]; allUserName=sp.getAll().keySet().toArray(newString[0]); ArrayAdapter<String>adapter=newArrayAdapter<String>( Login_Activity.this, android.R.layout.simple_dropdown_item_1line, allUserName); cardNumAuto.setAdapter(adapter);}publicvoidbeforeTextChanged(CharSequences,intstart,intcount, intafter){}publicvoidafterTextChanged(Editables){ passwordET.setText(sp.getString(cardNumAuto.getText().toString(),"")); }}4.1.2登录按钮监听器当顾客名密码输入完毕点击登录将会执行登录操作,因此,必要给登录按钮添加监听器,用来监听点击事件。详细流程为,得到顾客输入顾客名和密码,并新开线程。并在用提示框告知顾客当前正在验证顾客信息。详细实当代码如下:logBT.setOnClickListener(newOnClickListener(){ publicvoidonClick(Viewv){ cardNumStr=cardNumAuto.getText().toString(); passwordStr=passwordET.getText().toString(); mDialog=newProgressDialog(Login_Activity.this); mDialog.setIcon(DEFAULT_KEYS_DISABLE); mDialog.setTitle("登陆"); mDialog.setMessage("正在登陆服务器,请稍后..."); mDialog.show(); ThreadloginThread=newThread(newLoginThread()); loginThread.start();}});}4.1.3新开线程监听器绑定之后,在顾客点击登录按钮时将会新开一种线程,所有验证中操作所有在新线程中执行。新开线程重要用于发送http祈求并接受验证信息,之后告知页面显示登录成果实当代码如下所示:classLoginThreadimplementsRunnable{ publicvoidrun(){ Stringusername=cardNumAuto.getText().toString(); Stringpassword=passwordET.getText().toString(); ArrayList<String>userStr=loginServer(username,password); Messagemsg=handler.obtainMessage(); if(!(userStr.get(0).equals("0"))){ msg.what=1; handler.sendMessage(msg); }else{ if(savePasswordCB.isChecked()){//登陆成功才保存密码 sp.edit().putString(cardNumStr,passwordStr).commit();} msg.what=0; handler.sendMessage(msg);}}}新开线程又包括几项对数据解决工作,以及对返回解决成果,并对当前页面某些操作。4.1.4提交验证信息handler为接受返回验证信息并在界面显示登录成果,鉴于本学校服务器返回验证信息为一XML文献,解析后用泛型ArrayList存储,其中第一条为顾客名密码验证信息,返回1为验证不通过,返回0为通过,并附加某些顾客基本数据作为之后操作参数。其中http祈求URL与数据解决实当代码如下:privateArrayList<String>loginServer(Stringusername,Stringpassword){ ArrayList<String>userStr=null; StringuserName=username; StringpassWord=password; Stringpath=":8080/webdu/loginservlet?action=1&ucode="+userName+"&upwd="+passWord+"&utype=S"; path=path.replaceAll("\\s*",""); HttpDownloaderhttpdownloader=newHttpDownloader(); Stringjson=newString(httpdownloader.download(path));try{userStr=Method.xmlParse(json); }catch(Exceptione){}returnuserStr;}由于在Android中,在输入完毕后自动添加上一种空格,但http祈求URL中,服务器接受时没有控制,因此在这里得对生成URL进行解决,path=path.replaceAll("\\s*","")为去掉字符串中所有空格。该办法返回一种ArrayList,这个ArrayList是可变长数组,为以便返回数据可操作性。4.1.5Activity响应判断将服务器返回数据解析后,咱们就懂得了这次登录操作中究竟有无通过服务器验证,但是在新线程中下载解析后数据咱们无法直接在Activity中使用。因此当前Activity必要在新线程执行结束前处在等待状态,并且随时准备响应。新开线程与Activity不处在同一线程,不能直接对Activity进行操作。因此这里必要有一种Handler来接受新线程发送数据,并用此数据配合主线程更新Activity。前面新开线程中,咱们判断了服务器返回值与否为0,并为一种状态量设立了值,这个值就是Handler所接受值。通过新线程值来控制UI更新,实当代码如下:Handlerhandler=newHandler(){ publicvoidhandleMessage(Messagemsg) {switch(msg.what){ case0: mDialog.cancel(); Toast.makeText(getApplicationContext(),"登录成功", Toast.LENGTH_SHORT).show(); Intentintent=newIntent(); intent.setClass(Login_Activity.this,Main_Bootom_Tab.class); startActivity(intent); finish(); break; case1: mDialog.cancel(); Toast.makeText(getApplicationContext(),"账户或密码错误", Toast.LENGTH_SHORT).show(); break;} }};这是一种内部类,写在在Activity中。如果新线程返回msg.what=0则关闭Activity中对话框,并提示登录成功,然后跳转到程序主页面,并将登录页面销毁。如果不为0则提示顾客账户或密码错误。4.2程序主页面实现4.2.1主界面头部菜单栏顾客登录通过服务器验证后界面将跳转到Main_bootom_Tab页面,此页面知识一种框架,通过这个Activity可以同步加载各种页面,增长屏幕可显示信息量。在页面底部放置一种菜单栏,顾客可以通过点击此菜单栏来实现页面之间切换。制作这个头部菜单栏是为了提高软件可操作性,用是TabHost+RadioGroup相结合办法来制作这个某些。菜单栏底部位置是通过TabHost这个布局来实现,然后是LinearLayout线性布局来布置内容。内部选项卡是通过TabWiget来实现在工程下res/layout下建立一种名为main空xml文献,然后在这个文献里按照思路来添加布局代码。主界面菜单选项使用RadioGroup来建立,在这里布局中RadioGroup里容纳4个RadioButton,而RadioButton是单选按钮。在这种状况下就只有也只能有一种RadioButton能被选取,并且在开始时默认了第一种按钮被选中。其中RadioButton实现方式是在设立了内部文字,然后再按钮顶部上添加上图片,实当代码如下:<RadioButton android:text="@string/main_date" android:drawableTop="@drawable/tab_date" android:id="@+id/radio_button0" android:checked="true" style="@style/main_tab_bottom"/>从上述代码可以看到,在菜单每个选项卡样式都是调用了style上main_tab_bottom来实现样式,而main_tab_bottom背景background值是@drawable/btn_bg,btn_bg不是一种简朴背景图片,而是一种xml文献,通过这个文献可以实现菜单选项卡切换时背景切换效果,使得这个菜单栏更加美观,代码是使用了安卓selector来实现,在这里是通过不断条件来判断使用哪一种item,里面涉及了几种属性值,如与否获得焦点、与否响应事件、与否点击三个条件。实行代码如下:<selectorxmlns:android=""><itemandroid:state_focused="true"android:state_enabled="true"android:state_pressed="false"android:drawable="@drawable/btn_bg_s"/><itemandroid:state_enabled="true"android:state_pressed="true"android:drawable="@drawable/btn_bg_s"/><itemandroid:state_enabled="true"android:state_checked="true"android:drawable="@drawable/btn_bg_d"/></selector>制定完主页面布局后,在src/com.manage.activity下MainPage文献中OnCreate(OnCreate办法是用来初始化Activity实例对象)中调用布局,到当前为止顶部菜单栏布局已经基本完毕,但当前里面所相应内容还是空。因此就需要在这里给tabHost中添加tab内容,以第一格tab为例,先是通过Intent方式新建个mDate,用来实现页面跳转办法,然后动态用tabHost来通过addTab办法添加相应TabSpec值和各个属性。最后在添加RadioGroup选取操作函数,这里是通过switch来完毕相应按钮功能实现,在每个case项中通过tabHost.setCurrentTabByTag来给与特定值实现页面上跳转。最后效果如图4-1:图4-2主页界面头部菜单4.2.2页面跳转在Main_bootom_Tab中添加两个页面,里面添加系统功能选项。第一种为MainActivity,第二个为ChoiseCourse。实现效果如下图所示:图4-3系统主界面其中每一种选项是一种自定义RelativeLayout,定义样式为:<RelativeLayout android:id="@+id/course" android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="5dip"android:gravity="center_vertical"android:clickable="true"> <ImageView android:id="@+id/add_friend_shake" android:layout_marginLeft="10dip" android:layout_width="40dip" android:layout_height="40dip" android:layout_margin="4dip" android:src="@drawable/tqyb"/><TextViewandroid:id="@+id/miaoshuzbcs" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/add_friend_shake" android:layout_marginLeft="10dip" android:layout_marginTop="4dip" android:textColor="#068FFF" android:textSize="14sp" android:text="已选课程"/> <TextView android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_toRightOf="@id/add_friend_shake" android:layout_below="@id/miaoshuzbcs" android:layout_marginLeft="10dip" android:textColor="#666666" android:textSize="8sp" android:padding="2dip" android:text="(查询当学期所选课程详细信息)"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:src="@drawable/mm_submenu"/> </RelativeLayout>在主类当中通过results=(RelativeLayout)findViewById(R.id.results);办法直接得到一种对象,然后对象上绑定监听器。results.setOnClickListener(newgotoActivity());通过判断所点击对象ID将Intent中添加标志,最后用Intent对象启动新Activity,详细实当代码如下:classgotoActivityimplementsOnClickListener{ publicvoidonClick(Viewv){ Intentintent=newIntent(); intent.setClass(MainActivity.this,resInformation.class); if(v.getId()==R.id.results){intent.putExtra("mark","1"); }elseif(v.getId()==R.id.course){ intent.putExtra("mark","2");} elseif(v.getId()== R.id.schedule){ intent.putExtra("mark","3");} elseif(v.getId()==R.id.status){ System.out.println("第四个页面>waterlevenow——logn!!"); intent.putExtra("mark","4");} elseif(v.getId()==R.id.examinfi){ System.out.println("第五个页面>waterlevenow——logn!!"); intent.putExtra("mark","5"); }else{return;} MainActivity.this.startActivity(intent); }新启动Activity被启动后,去除Intent中传入键值对,通过标志信息判断,来选取所需要发送URL。由前期分析到,学校教务系统只能通过http祈求发送接受数据,从系统整体构造分析,加个连接池类可以增长系统可扩展性与可管理性。整个连接池类只作为字符串返回与修饰,在这里不做简介。4.2.3通过WebView显示信息在Android手机中内置了一款高性能webkit内核浏览器,在SDK中封装为一种叫做WebView组件。WebKit是MacOSXv10.3及以上版本所包括软件框架。同步,WebKit也是MacOSXSafari网页浏览器基本。WebKit是一种开源项目,重要由KDEKHTML修改而来并且包括了某些来自苹果公司某些组件。老式上,WebKit包括一种网页引擎WebCore和一种脚本引擎JavaScriptCore,它们分别相应是KDEKHTML和KJS。但是,随着JavaScript引擎独立性越来越强,当前WebKit和WebCore已经基本上混用不分。在这里通过添加一种WebView来显示服务器返回页面,实当代码如下:packagecom.keen.electivesystem;importcom.keen.electivesystem.utils.ExtractionUrl;importcom.keen.electivesystem.utils.myApplication;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.KeyEvent;importandroid.webkit.WebView;importandroid.webkit.WebViewClient;publicclassresInformationextendsActivity{ privateWebViewwebview; privatemyApplicationmyApp; @Override protectedvoidonCreate(BundlesavedInstanceState){ //TODOAuto-generatedmethodstub super.onCreate(savedInstanceState); setContentView(R.layout.resinfo); Stringurl=null; myApp=(myApplication)getApplication(); ExtractionUrlfacUrl=newExtractionUrl(); Intentintent=getIntent(); Stringmark=intent.getStringExtra("mark"); intmk=Integer.parseInt(mark); switch(mk){ case1:url=facUrl.getResults(myApp.getStid());break; case2:url=facUrl.getCourse(myApp.getStid()); break; case3:url=facUrl.getSchedule(myApp.getStid(),myApp.getStuName()); break; case4:url=facUrl.getStatus(myApp.getStid(),myApp.getDpcode_g()); break; case5:url=facUrl.getExamInfi(myApp.getStid());break; case6: Stringcuid=intent.getStringExtra("cuid"); Stringtpcode=intent.getStringExtra("tpcode"); Stringstid=myApp.getStid(); Stringgrade=myApp.getDpcode_g(); Stringspid=myApp.getDpid(); Stringclid=myApp.getUserOther(); Stringfx=myApp.getFx(); url=facUrl.getCourseDetail(cuid,tpcode,stid,grade,spid,clid,fx); System.out.println(url); } webview=(WebView)findViewById(R.id.webview); //设立WebView属性,可以执行Javascript脚本 webview.getSettings().setJavaScriptEnabled(true); //加载需要显示网页 webview.loadUrl(url); //设立Web视图 webview.setWebViewClient(newHelloWebViewClient());} @Override publicbooleanonKeyDown(intkeyCode,KeyEventevent){if((keyCode==KeyEvent.KEYCODE_BACK)&&webview.canGoBack()){webview.goBack();//goBack()表达返回WebView上一页面returntrue;}returnfalse;}privateclassHelloWebViewClientextendsWebViewClient{@OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){view.loadUrl(url);returntrue;}}}通过重写WebViewonKeyDown办法可以解决点击返回键时直接退出页面。4.3选课功能实现选课功能由于数据量比较多,但对于普通学生顾客而言选课只能选取所相应专业课程与通识课程,因此在这里其她专业课程将不做显示。4.3.1页面设计学生选课由于需要显示项比较多,但在手机界面显示项目太多会影响顾客对其操作与体验。因此在这里,只显示了教师,学分,课程名称,以及教室。整个信息重要使用ListView动态加载可选课程信息。ListView所需要布局文献如下:<LinearLayoutxmlns:android=""xmlns:tools=""android:layout_width="fill_parent"android:layout_height="fill_parent" android:orientation="horizontal" android:paddingLeft="1dip" android:paddingRight="1dip"android:paddingTop="1dip" android:paddingBottom="1dip"> <LinearLayout android:id="@+id/listLinearLayouttop" android:layout_width="120dip" android:layout_height="60dip" android:orientation="vertical"> <TextViewandroid:id="@+id/coursrTracher" android:layout_width="fill_parent" android:layout_height="30dip" android:textSize="25sp" android:singleLine="true"/> <TextViewandroid:id="@+id/courseScore" android:layout_width="fill_parent" android:layout_height="30dip" android:gravity="left" android:textSize="25sp"/> </LinearLayout> <LinearLayout android:id="@+id/listLinearLayoutdown" android:layout_width="fill_parent" android:layout_height="60dip" android:orientation="vertical"> <TextViewandroid:id="@+id/coursrName" android:layout_width="fill_parent" android:layout_height="30dip" android:textSize="25sp" android:singleLine="true"/> <TextViewandroid:id="@+id/courseClassroom" android:layout_width="fill_parent" android:layout_height="30dip" android:gravity="left" android:textSize="12sp"/> </LinearLayout></LinearLayout>该布局文献定义了四个TextView作为显示信息框架,通过代码动态加载数据,并且生成对象。页面加载时由于要从网络上下载数据,做某些耗时操作,因此在这里必要得加入一种新线程用来解决耗时操作,并提示顾客等待。如下代码写入onCreate办法中: bld=newBinderListData(); bld.setContext(this); mDialog=newProgressDialog(CourseList.this); mDialog.setMessage("正在下载数据,请稍候..."); mDialog.show(); ThreadDownLoader=newThread(newdownThread()); DownLoader.start(); 4.3.2开辟新线程新线程中重要用来做下载服务器返回数据,以及解析返回数据等操作。最后将解决完数据装入一种HashMap中用作ListView填入数据。详细实当代码如下:classdownThreadimplementsRunnable { @Override publicvoidrun(){ myApp=(myApplication)getApplication(); Stringpath=et.getChoiseCourse(myApp.getDpid(),myApp.getDpcode_g()); Stringstr=null; HttpDownloaderdownhtml=newHttpDownloader(); str=downhtml.download(path,2); AnalyticHtmlhtmla=newAnalyticHtml(); try{stinfo=htmla.getResult(str,1); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace();} for(inti=1;i<stinfo.size()-1;i++){ HashMap<String,String>map=newHashMap<String,String>(); map.put("courseTeacher","教师:"+stinfo.get(i)[3]); map.put("courseName","课名:"+stinfo.get(i)[2]); map.put("courseScore","学分:"+stinfo.get(i)[7]); map.put("courseClassroom","教室:"+stinfo.get(i)[4]); list.add(map);} Messagemsg=handler.obtainMessage(); msg.what=0; msg.obj=list; handler.sendMessage(msg);}}其myApp对象为应用开始运营时自动创立一种对象,通惯用于存储全局变量,在这里用来存储顾客登录信息。新线程被运营后调用run()办法,先下载所需Html页面,然后解析得到一种ArrayList对象,里面存储字符串数组,每一种数组表达一条信息。然后将这些信息有选取装入一种HashMap对象,之后将对象传给Handle用来更新UI。4.3.3用handler更新UI通过前面操作,咱们得到一种HashMap对象,里面存储着要显示到ListView中各个位置数据,但由于新开线程与UI主线程不在一种线程里,因此,在新开线程中无法对UI进行更新操作,这里就需要引入Handler。在新线程解决完数据后告知Handler,并将解决后数据传入。Handler接受状态信息后,取出传入数据,更新UI,将数据一一显示到顾客界面。实当代码如下:Handlerhandler=newHandler(){ publicvoidhandleMessage(Messagemsg){ SimpleAdapterlistAdapter; switch(msg.what){ case0:list=(ArrayList<HashMap<String,String>>)msg.obj; bld.setlistData(list,layoutId,headMsg,headId); listAdapter=bld.getListAdapter(); setListAdapter(listAdapter); mDialog.cancel(); break; case1:break; }}};4.3.4顾客点击事件到这里,程序已经将ListView数据添加完毕,得到页面如下图所示:图4-4可选课程到这里还不够,我需要让顾客点击某一条就可以显示出该条目详细信息与添加课程到顾客课表。因此,这里必选先给这些ListView添加事件监听。ListView控件在设计上符合这里需求,并且这里添加事件操作也比较简朴,只要重写onListItemClick(ListViewl,Viewv,intposition,longid)办法即可。这个办法有四个参数,第一种为ListView自身,第二个为顾客所点击View,第三个为顾客所点击View位置,第四个为ViewId。通过这几种参数就可以拟定顾客操作,并且依照操作做出响应。在这里当顾客点击某个项,取出这个项课程号与编码,通过Intent携带参数启动前面定义WebView,然后通过判断生成该页面URL然后显示在屏幕供顾客操作。重要实当代码如下:protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){ //TODOAuto-generatedmethodstub super.onListItemClick(l,v,position,id); String[]listInfo; listInfo=stinfo.get(position+1); Intentintent=newIntent(); intent.setClass(this,resInformation.class); intent.putExtra("mark","6"); intent.putExtra("cuid",listInfo[0]); intent.putExtra("tpcode",listInfo[1]); CourseList.this.startActivity(intent);}4.4公共类4.4.1XML文献解析XML在各种开发中都广泛应用,Android也不例外。作为承载数据一种重要角色,如何读写XML成为Android开发中一项重要技能。在Android中,常用XML解析器分别为DOM解析器、SAX解析器和PULL解析器。在这里采用SAX解析器。SAX(SimpleAPIforXML)解析器是一种基于事件解析器,事件驱动流式解析方式是,从文献开始顺序解析到文档结束,不可暂停或倒退。它核心是事件解决模式,重要是环绕着事件源以及事件解决器来工作。当事件源产生事件后,调用事件解决器相应解决办法,一种事件就可以得到解决。在事件源调用事件解决器中特定办法时候,还要传递给事件解决器相应事件状态信息,这样事件解决器才可以依照提供事件信息来决定自己行为。SAX解析器长处是解析速度快,占用内存少。非常适合在Android移动设备中使用。因此在这里使用SAX方式解析此XML文献。通过前面操作接下来就是解析服务器返回信息。普通返回信息格式如下:1、服务器验证成功返回格式:<UINF> <INF>0</INF> <INF>学生号</INF> <INF>姓名^专业班级^入学时间</INF> <INF>{dpid}{dpcode_grade}{userother}{FX}~学号^@权限$</INF></UINF>2、服务器验证失败返回:<UINF> <INF>1</INF></UINF>登录成功后返回数据是之后使用系统其她功能时参数,当前需要吧这些数据解析成单独某些并且保存下。保存之前先得将XML文献解析成本系统可用数据。在这里,我用SAX方式将标签中数据解析成一种ArrayList可变长数组形式。在登录判断时,直接判断ArrayList对象存储第0项数据与否为0,如果是则保存密码与登录状态,并跳转页面,否则提示顾客输入错误,并清空输入栏。在解析XML文献时我封装两个类Method.java与ExampleHandler.java。第一种负责接受返回数据并创立工厂模式准备解析,第二个是一种专门以SAX方式建立一种XML文献解决器,详细实当代码如下(核心代码):Method.javatry{SAXParserFactoryspf=SAXParserFactory.newInstance();SAXPa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级历史人教版下册听课评课记录:第5课 三大改造
- 林地长期承包合同范本
- 乡镇精装修商铺出租合同范本
- 储存场地租赁合同范本
- 广告公司材料采购合同范本
- 二零二五年度无子女离婚协议书及子女教育资助合同
- 二零二五年度酒店会议室场地租赁及配套交通合同
- 二零二五年度酒吧租赁合同合同签订后的租赁物维护责任
- 2025年度商铺转让三方合同附品牌使用权及营销支持
- 夏令营代理商合作协议书范本
- 三星SHP-DP728指纹锁说明书
- 预应力锚索张拉及封锚
- 烤烟生产沿革
- GB 1886.227-2016食品安全国家标准食品添加剂吗啉脂肪酸盐果蜡
- 毛泽东思想课件-第七章 毛泽东思想的活的灵魂
- 公共关系效果的评估课件
- 建筑施工安全员理论考核试题与答案
- 高速公路用地勘测定界及放线定桩技术标书
- 华莱士标准化体系
- 快捷smt全自动物料仓储方案
- keysight眼图和抖动噪声基础知识与测量方法
评论
0/150
提交评论