移动应用开发实验报告.docx
《移动应用开发实验报告.docx》由会员分享,可在线阅读,更多相关《移动应用开发实验报告.docx(60页珍藏版)》请在冰豆网上搜索。
移动应用开发实验报告
中南大学
移动应用开发试验汇报
内容介绍··································3
上机试验要求及规范·············4
试验一···································5~11
试验二···································12~20
试验三··································21~42
试验四··································43~52
内容简介
移动应用开发是计算机专业学生一门专业课程,着重讲述移动应用编程技术方法。
对于学生从事移动应用系统研发、使用和维护相关键意义。
本课程概念多、内容包含面广、系统性强。
经过本课程学习,学生应能从软件、硬件功效分配角度去了解、分析和研究移动应用系统,建立起对移动应用系统全方面认识,树立全方面地、发展地看问题见解,从而加深对多种类型移动应用系统了解。
本课程学习应重视理论与实践相结合,所以试验教学是教学步骤中必不可少关键内容。
经过试验教学学习,使学生熟练掌握相关移动应用编程基础概念、基础原理和基础思想,掌握对移动应用系统进行设计、分析和计算方法。
试验部分包含四个试验,包含试验目、试验内容和试验所需环境等,介绍了每个试验所需部分基础知识和技巧。
在试验中给出试验题,跟课堂教学内容都有亲密关系,所以需要将课堂上讲授例子程序融会贯通,掌握试验所需部分基础方法和工具,并在吃透例子程序基础上,主动独立思索设计和编写满足试验要求程序。
中南大学信息科学与工程学院鲁鸣鸣制订
上机试验要求及规范
移动应用开发课程含有比较强实践性。
上机试验是一个关键教学步骤。
通常情况下学生能够重视试验步骤,对于编写程序上机练习含有一定主动性。
不过轻易忽略试验总结,忽略试验汇报撰写。
对于一名大学生必需严格训练分析总结能力、书面表示能力。
需要逐步培养书写科学试验汇报以及科技论文能力。
拿到一个题目,通常不要急于编程。
正确方法是:
首先了解问题,明确给定条件和要求处理问题,然后根据自顶向下,逐步求精,分而治之策略,根据面向对象程序设计思绪,逐一地处理子问题。
一、试验汇报基础要求:
通常性、较小规模上机试验题,必需遵照下列要求。
养成良好习惯。
姓名班级学号日期题目
i.问题描述
ii.设计简明描述
iii.程序清单(带有必需注释)
iv.结果分析(原始图示,测试数据与运行统计,分析正确性;)
v.调试汇报:
试验者必需重视最终这两个步骤,不然等同于没有完成试验任务。
这里能够表现个人特色、或发明性思维。
具体内容包含:
测试数据与运行统计;调试中碰到关键问题,自己是怎样处理;经验和体会等。
二、试验汇报提升要求:
阶段性、较大规模上机试验题,应该遵照下列要求。
养成科学习惯。
(1)问题描述
(2)需求和规格说明
(3)描述问题,简述题目要处理问题是什么。
要求软件做什么。
原题条件不足时补全。
(4)概要设计:
功效模块划分
(5)具体设计:
每部分模块设计,含数据结构设计,算法描述(步骤图或PDL)
a.设计思想:
关键算法基础思想。
b.设计表示:
每个函数头和规格说明;列出每个函数所调用和被调用函数,也能够经过调用关系图表示。
(6)实现注释:
各项功效实现程度、在完成基础要求基础上还有什么功效。
(7)用户手册:
即使用说明书。
(8)调试汇报:
调试过程中碰到关键问题是怎样处理;设计回顾、讨论和分析;时间复杂度、空间复杂度分析;改善设想;经验和体会等。
试验一GeoQuiz应用实现
一、试验目
1.掌握activity和布局文件基础概念
2.掌握编写简单Android应用步骤
3.掌握响应用户交互操作基础方法
二、试验开发环境和工具
能够在Linux或者Windows操作系统上搭建开发环境,所使用开发工具包含ADTbundle或AndroidStudio,使用Java语言,工具包使用JDK1.7或1.8。
三、试验内容
1、参考参考书《Android编程权威指南:
thebignerdranchguide》第一章给出Android应用GeoQuiz,能测试用户地理知识。
用户经过单击True或False按钮往返复屏幕上问题,GeoQuiz可即时反馈答案正确是否。
以下图所表示:
一、问题描述
这是一个简易地理知识问答app。
此次试验是一个初步设计,关键内容有:
首先设计出一个界面(相当于android入门),这个界面包含一个TextView用来展示题目,以及两个按钮,一个代表true,另一个代表false,当点击这两个按钮中一个时主界面上要给出答题是否正确。
其次,还要实现答完题后题目自动跳转。
二、设计简明描述
根据AndroidMVC思想
深入了解MVC概念
MVC即Model-View-Controller。
M:
逻辑模型,V:
视图模型,C:
控制器。
MVC模式下,系统框架类库被划分为3种:
模型(Model)、视图(View)、控制器(Controller)。
模型对象负责建立数据结构和对应行为操作处理。
视图对象负责在屏幕上渲染出对应图形信息展示给用户看。
控制器对象负责截获用户按键和屏幕触摸等事件,协调Model对象和View对象。
用户与视图交互,视图接收并反馈用户动作;视图把用户请求传给对应控制器,由控制器决定调用哪个模型,然后由模型调用对应业务逻辑对用户请求进行加工处理,假如需要返回数据,模型会把对应数据返回给控制器,由控制器调用对应视图,最终由视图格式化和渲染返回数据,对于返回数据完全能够增加用户体验效果展现给用户。
一个模型能够有多个视图,一个视图能够有多个控制器,一个控制器也能够有多个模型。
(1)、模型(Model)
Model是一个应用系统关键部分,代表了该系统实际要实现全部功效处理。
比如:
在视频播放器中,模型代表一个视频数据库及播放视频程序函数代码;在拍照应用中,模型代表一个照片数据库,及看图片时程序函数代码。
在一个电话应用中,Model代表一个电话号码簿,以及拨打电话和发送短信程序函数代码。
Model在values目录下经过xml文件格式生成,也能够经过硬编码方法直接Java代码生成。
View和Model是经过桥梁Adapter来连接起来。
(2)、视图(View)
View是软件应用传送给用户一个反馈结果。
它代表软件应用中图形展示、声音播放、触觉反馈等职责。
视图根节点是应用程序本身窗口。
比如,视频播放器中可能包含目前播放画面,这个画面就是一个视图。
另一个视图组件可能是该视频文字标题。
再一个就是部分播放按键,比如:
Stop、Start、Pause等按钮。
View在layout目录下经过xml文件格式生成,用findViewById()获取;也能够经过硬编码方法直接Java代码生成。
(3)、控制器(Controller)
Controller在软件应用负责对外部事件响应,包含:
键盘敲击、屏幕触摸、电话呼入等。
Controller实现了一个事件队列,每一个外部事件均在事件队列中被唯一标识。
框架依次将事件从队列中移出并派发出去。
依据以上分析,在该项目中首先在视图层也就是xml文件中设计以下:
android="
xmlns:
tools="
android:
layout_width="match_parent"
android:
layout_height="match_parent"
android:
gravity="center"
android:
orientation="vertical"
android:
paddingBottom="@dimen/activity_vertical_margin"
android:
paddingLeft="@dimen/activity_horizontal_margin"
android:
paddingRight="@dimen/activity_horizontal_margin"
android:
paddingTop="@dimen/activity_vertical_margin"
tools:
context=".MainActivity">
android:
layout_width="wrap_content"
android:
layout_height="wrap_content">
android:
id="@+id/tv1"
android:
layout_width="wrap_content"
android:
layout_height="wrap_content"
android:
gravity="center"
android:
text="ThePacificOceanislargerthantheAtlanticOcean."/>
android:
id="@+id/tv2"
android:
layout_width="20dp"
android:
layout_height="30dp"/>
android:
layout_width="wrap_content"
android:
layout_height="wrap_content">
首先实现一个简单界面,关键用到是线性布局(LinearLayout),只要设置多个属性就能够,以下两行分别是设置为居中、垂直。
(注意gravity与layout_gravity区分,gravity指是该view里面内容与该view相对关系,而layout_view指是该view与父view相对位置关系)
android:
gravity="center"
android:
orientation="horizontal"
添加一个TextView,两个Button,首先都要设定她们大小,以下(wrap_content指自适应大小,依据内容来自动调整大小)
android:
layout_width="wrap_content"android:
layout_height="wrap_content"
然后就是她们显示内容,当然TextView也要显示内容即题目,不过,我们考虑到后面要自动改变题目内容,所以临时不设置内容,先让其空着。
而true和false两个按钮则要先设置其text。
我们为了提升代码复用,降低硬编码,我们将使用字符串引用来设置两个按钮text。
首先要在strings.xml文件中(res->values->strings.xml)添加两个字符串。
true
false
然后在activity_main.xml文件中设置两个按钮text
android:
text="@string/true_button"
控制层设计以下:
packagecom.example.testcase;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.Menu;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.TextView;
importandroid.widget.Toast;
publicclassMainActivityextendsActivityimplementsOnClickListener{
privateButtonbut1,but2,but;
privateTextViewtv;
privateintid;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
publicbooleanonCreateOptionsMenu(Menumenu){
//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
getMenuInflater().inflate(R.menu.main,menu);
but1=(Button)this.findViewById(R.id.bu1);
but2=(Button)this.findViewById(R.id.bu2);
tv=(TextView)this.findViewById(R.id.tv1);
but1.setOnClickListener(this);
but2.setOnClickListener(this);
returntrue;
}
@Override
publicvoidonClick(Viewv){
id=v.getId();
if(id==but1.getId()){
Toast.makeText(this,"恭喜你,答对了!
",0).show();
}else{
Toast.makeText(this,"Sorry,答错了!
",0).show();
}
}
}
packagecom.example.testcase;
publicclassTrueFalse{
privateintmQestion;//保留地理知识字符串id
privatebooleanmTrueQuestion;
publicTrueFalse(intmQestion,booleanmTrueQuestion){
super();
this.mQestion=mQestion;
this.mTrueQuestion=mTrueQuestion;
}
publicintgetmQestion(){
returnmQestion;
}
publicvoidsetmQestion(intmQestion){
this.mQestion=mQestion;
}
publicbooleanismTrueQuestion(){
returnmTrueQuestion;
}
publicvoidsetmTrueQuestion(booleanmTrueQuestion){
this.mTrueQuestion=mTrueQuestion;
}
}
三、调试结果
试验二GeoQuiz应用实现进阶
一、试验目
1.掌握Android中MVC设计模式
2.掌握Activity生命周期基础概念
3.掌握Android应用调试
3.掌握Android应用中多个组件切换基础方法
二、试验开发环境和工具
能够在Linux或者Windows操作系统上搭建开发环境,所使用开发工具包含ADTbundle或AndroidStudio,使用Java语言,工具包使用JDK1.7或1.8。
三、试验内容
1、参考参考书《Android编程权威指南:
thebignerdranchguide》第2、3、4、5章给出Android应用GeoQuiz进阶具体代码和讲解,完善GeoQuiz应用,使得
1)GeoQuiz能从多个应用之间切换,以下图所表示:
2)创建GeoQuiz应用横向布局,以下图所表示,并实现跨周期数据保留(手机旋转后,应用目前问题状态仍能保持)
3)为GeoQuiz应用增加第二个用户界面(以及对应activity),新增activity用来给用户提供查看目前问题答案,以下图所表示:
一、问题描述
在此次试验中关键实现以下多个功效:
·使用数组实现问题类控制,轻易做到题目跳转
·翻转手机屏幕后任然能保持在同一个问题中
·实现前翻后翻功效
·实现作弊功效
首先,在将题目抽象为一个类时候,首先要分析这个类属性。
在TrueFalse类中,关键有一个整型变量mQestion用于地理知识字符id,一个布尔型变量mTrueQuestion用于显示该问题是否正确。
TrueFalse类具体实现以下
packagecom.example.testcase;
publicclassTrueFalse{
privateintmQestion;//保留地理知识字符串id
privatebooleanmTrueQuestion;
publicTrueFalse(intmQestion,booleanmTrueQuestion){
super();
this.mQestion=mQestion;
this.mTrueQuestion=mTrueQuestion;
}
publicintgetmQestion(){
returnmQestion;
}
publicvoidsetmQestion(intmQestion){
this.mQestion=mQestion;
}
publicbooleanismTrueQuestion(){
returnmTrueQuestion;
}
publicvoidsetmTrueQuestion(booleanmTrueQuestion){
this.mTrueQuestion=mTrueQuestion;
}
}
在activity类中,mQuestionBank数组中存放了题目,在TextView设置文本内容时,只要依据TrueFalse对象mQuestion即问题id来设置即可
MainActivity类具体实现以下:
packagecom.example.geopoe;
importandroid.app.Activity;
importandroid.content.Intent;
importandroid.os.Bundle;
importandroid.view.Menu;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.ImageButton;
importandroid.widget.TextView;
importandroid.widget.Toast;
publicclassMainActivityextendsActivity{
privateTextViewmQuestionText;
privateButtonmTrueButton,mFalseButton,mCheatButton;//
privateImageButtonmPrevImageButton,mNextImageButton;
privateintmCurrentIndex;//用于统计目前文本id
privatebooleanmCheat;//表示是否作弊
privatestaticfinalStringKEY_INDEX="index";
publicstaticfinalStringSHOW_ANSWER="answer";
//mQuestionBank数组中存放了题目,在TextView设置文本内容时,只要依据
//TrueFalse对象mQuestion即问题id来设置即可
privateTrueFalse[]mQuestionBank=newTrueFalse[]{
newTrueFalse(R.string.question_an,false),
newTrueFalse(R.string.question_chi,false),
newTrueFalse(R.string.question_su,false),
newTrueFalse(R.string.question_tai,true),
newTrueFalse(R.string.question_zhu,true),
newTrueFalse(R.string.quetion_ya,true),};
@Override
protectedvoidonActivityResult(intrequestCode,intr