武汉工程大学
计算机科学与工程学院
专业实习报告
武汉工程大学计算机科学与工程学院 制
说明:
1、 实习指导教师由学院校内教师担任,负责组织实习、学生管理、参加实习答辩、实习成绩评定、给出实习评语等工作。
2、 实习报告由武汉工程大学计算机科学与工程学院提供基本格式(适用于学院各专业),各教研室和指导教师可根据本专业特点及实习内容做适当的调整,学生须按指导教师下达的实习报告格式认真进行填写。
3、 实习成绩由指导教师根据学生的实习情况给出各项分值及总评成绩。
4、 指导教师评语一栏由实习指导教师(校内教师)就学生在整个实习期间的表现给出客观、全面的评价,包括实习期间的表现、实习报告的质量、实习答辩的情况等。
5、 学生必须参加实习答辩,凡不参加实习答辩者,实习成绩一律按不及格处理。实习答辩小组应由2人及以上教师组成,其中校内指导教师必须参加,否则视作无效答辩。
6、 实习报告正文字数应不少于5000字,实习日记字数不少于300字/天。
7、 实习报告正文中实习目的与任务、实习地点、实习内容和要求等项,可由指导教师统一给出(自主实习除外)。学生自主实习的,可根据实习的情况自行填写以上内容。
8、 自主实习的学生还应提供由实习单位出具的实习鉴定表(复印件),与实习报告一起装订,作为参加实习答辩和评定成绩的依据。
专业实习成绩评定表
学生姓名: 学号: 1105080101 班级: 01班
专业实习答辩记录表
指导教师评语
一、实习目的与任务
通过参观企业,企业内部高层公司发展的介绍,业务层面对人员的需求的交流,再采取新员工内训的方式培养学生。通过这种方式使学生了解到软件企业的业务发展,也强化了专业技术,为未来的就业奠定了良好的基础。培养和提高学生对岗位的适应能力,使学生更多的了解软件企业的研发流程、项目配置管理和软件开发技术。
二、实习地点
无锡NIIT(中国)服务外包实训基地
三、实习内容和要求
通过本项目,让学员熟悉Android开发、J2se、J2ee核心技术、Oracle数据库等专业知识,体验软件开发的生命周期,了解当前流行的软件开发技术,增加项目经验,增强就业竞争力。实习不但关注相关开发技术的具体实现,还注重培养学员软件系统架构的设计能力。一个好的系统架构具有可靠、安全、可扩展、可定制、可扩展、可维护等特性,从而最终增加产品的竞争力。参照目前国内主流商业软件产品开发流程,并结合实训生的实际情况, 总结出一套软件开发流程。首先从开发流程上分解为启动、细化、构造和实施四个里程碑,每个里程碑结束之后都需要对项目的开发成果进行评审或测试,以保证项目的按时按量按质地完成。并且全程使用配置管理工具管理文档、代码等项目成果。
四、实习总结及分析
经过两周的实习,我仔细总结了一下,我们的实习内容大概可以分为三个模块,分别是老师讲授,完成作业、完成项目,下面我就依次对每个环节进行总结分析。
课堂学习
1、开发环境的搭建及开发前知识储备
1)、搭建开发环境
首先安装JDK,按照提示一步步完成,然后开始配置环境变量,鼠标右键点击计算机,然后按照 “计算机→属性→高级系统设置→高级→环境变量 “顺序打开对话框,然后选择“系统变量→新建 JAVA_HOME 变量”打开对话框 ,变量值填写 jdk的安装目录。然后选择“系统变量→寻找 Path 变量→编辑”打开对话框,在变量值输入“ %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”, 在输入时,注意不要删除原来数据,接下来继续按照“系统变量→新建 CLASSPATH 变量”打开对话框,变量值填写 “ .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar”,最后检验是否配置成功运行cmd 输入 java -version (java 和 -version 之间有空格),若下如图所示 显示版本信息 则说明安装和配置成功。
安装完JDK后安卓开发环境基本搭建完成,然后就是安装ADT,ADT的安装比较简单就是一个解压缩的过程,解压完毕打开里面的文件夹,找到eclipse双击运行,这样开发环境就搭建完毕了。
2)、开发前知识储备
安卓是一个以Linux为基础的开放源代码移动设备操作系统, Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。目前,安卓主要用于智能手机和平板电脑,由Google成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发中。Android已发布的最新版本为Android 5.0(Lollipop)。
2、布局
2.1、线性布局
线性布局会将容器中的组件一个一个排列起来, LinearLayout可以控制组件 横向 或者 纵向 排列, 通过android:orientation属性控制;不换行属性:线性布局中的组件不会自动换行, 如果组件一个一个排列到尽头之后, 剩下的组件就不会显示出来
2.1.1、 LinearLayout常用属性
(1)基线对齐
xml属性: android:baselineAligned;
设置方法: setBaselineAligned(boolean b);
作用:如果该属性为false,就会阻止该布局管理器与其子元素的基线对齐;
(2)设分隔条
xml属性: android:divider
设置方法: setDividerDrawable(Drawable)
作用:设置垂直布局时两个按钮之间的分隔条
(3)对齐方式(控制内部子元素)
xml属性: android:gravity
设置方法: setGravity(int)
作用: 设置布局管理器内组件(子元素)的对齐方式
支持的属性 : top,bottom,left, right ,center_vertical(垂直方向居中),center_horizontal(水平方向居中), fill_vertical(垂直方向拉伸),fill_horizontal(水平方向拉伸) ,center,fill,clip_vertical,clip_horizontal
可以同时指定多种对齐方式 :如 left|center_vertical 左侧垂直居中
(4)权重最小尺寸
xml属性: android:measureWithLargestChild
设置方法: setMeasureWithLargestChildEnable(boolean b)
作用: 该属性为true的时候, 所有带权重的子元素都会具有最大子元素的最小尺寸
(5) 排列方式
xml属性: android:orientation
设置方法:setOrientation(int i)
作用:设置布局管理器内组件排列方式,设置为horizontal(水平),vertical(垂直), 默认为垂直排列
2.1.2、 LinearLayout子元素控制
LinearLayout的子元素, 即LinearLayout中的组件, 都受到LinearLayout.LayoutParams控制,因此LinearLayout包含的子元素可以执行下面的属性
(1) 对齐方式
xml属性:android:layout_gravity
作用: 指定该元素在LinearLayout(父容器)的对齐方式, 也就是该组件本身的对齐方式, 注意要与android:gravity区分
(2) 所占权重
xml属性: android:layout_weight
作用:指定该元素在LinearLayout(父容器)中所占的权重, 例如都是1的情况下, 那个方向(LinearLayout的orientation方向)长度都是一样的
2.1.3、 控制子元素排列 与 在父元素中排列
控制本身元素属性与子元素属性:
设备组件本身属性: 带layout的属性是设置本身组件属性
设置子元素属性: 不带layout的属性是设置其所包含的子元素
LayoutParams属性: 所有的布局管理器都提供了相应的LayoutParams内部类, 这些内部类用于控制该布局本身, 如 对齐方式 layout_gravity, 所占权重 layout_weight, 这些属性用于设置本元素在父容器中的对齐方式
容器属性: 在android:后面没有layout的属性基本都是容器属性, android:gravity作用是指定指定本元素包含的子元素的对齐方式, 只有容器才支持这个属性
2.2、相对布局
相对布局由RelativeLayout代表,相对布局容器内子组件的位置总是相对兄弟组件、父容器来决定的,因此这种布局方式被称为相对布局。
如果A组件的位置是由B组件的位置来决定的,Android要求先定义B组件,再顶定义A组件。
2.2.1、RelativeLayout的XML属性及相关方法说明
setGravity(int) 设置该布局容器内部各子组件的对齐方式
setIgnoreGravity(int) 设置哪个组件不受gravity组件的影响
2.2.2、RelativeLayout.LayoutParams里只能设为boolean值得属性
android:layout_centerHorizontal 控制该子组件是否位于布局容器的水平居中位置 android:layout_centerVertical 控制该子组件是否位于布局容器的垂直居中位置 android:layout_Inparent 控制该子组件是否位于布局容器的中央位置 android:layout_alignParentBottom 控制该子组件是否位于布局容器低端对齐 android:layout_alignParentLeft 控制该子组件是否位于布局容器左边对齐 android:layout_alignParentRight 控制该子组件是否位于布局容器右边对齐 android:layout_alignParentTop 控制该子组件是否位于布局容器顶端对齐
2.2.3、RelativeLayout.LayoutParams里只能设为其他UI组件ID的属性
android:layout_toRightOf 控制该子组件位于给出ID组件的右侧
android:layout_toLeftOf 控制该子组件位于给出ID组件的左侧 android:layout_above 控制该子组件位于给出ID组件的上方
android:layout_below 控制该子组件位于给出ID组件的下方 android:layout_alignTop 控制该子组件位于给出ID组件的上边界对齐
android:layout_alignBottom 控制该子组件位于给出ID组件的下边界对齐 android:layout_alignLeft 控制该子组件位于给出ID组件的左边界对齐 android:layout_alignRight 控制该子组件位于给出ID组件的右边界对齐
2.3、应用示例
老师在上课时讲解的思路基本是边演示边讲,操作性比较强,关键讲了布局和通信即Intent意图,老师讲了Activity是Android组件中最基本也是最为常见用的四大组件之一。它是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。当一个 Activity 实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。
1)、文本标签
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="帐号">
</TextView>
2)、文本输入框
<EditText
android:id="@+id/password_et"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请输入密码:"
android:singleLine="true" />
3)、按钮
<Button
android:id="@+id/callBtn"
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:text="登陆"
android:onClick="login" />
如图
图1-1 登陆界面
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/layout" >
</ListView>
如图:
图 1-2
画图功能,简单讲,可以简单的去画一个东西,然后发送给别人。老师就对这个类似于画板的功能进行了讲解,而思路就是去判断你是否按下,是否松开,在滑动的过程中在屏幕打印东西。这就要去如何记录这些轨迹。首先要获取开始时起点的坐标以及结束时终点的坐标。利用MotionEvent事件中事先设置好的属性。例如MotionEvent.ACTION_DOWN点击屏幕时会返回数字0,MotionEvent.ACTION_MOVE移动时返回数字1等等。对各种事件进行监听,然后做出相应的反馈动作。效果图如1-8 publicbooleanonTouch(Viewv,MotionEventevent)
{
switch(event.getAction()) {
caseMotionEvent.ACTION_DOWN:
startX =event.getRawX();
startY =event.getRawY();
break;
caseMotionEvent.ACTION_MOVE:
floatstopX = event.getRawX();
floatstopY=event.getRawY(); canvas.drawLine(startX,startY, stopX, stopY, paint);
startX =event.getRawX();
startY=event.getRawY(); imageView.setImageBitmap(bitmap); break;
caseMotionEvent.ACTION_UP break;
default: break; }
returntrue;
如图:
图1-3 画笔
作业练习
作业中老师布置了一个小项目,即一个简单的购物应用,只做出布局即可,主页面可以采用相对布局,也可以采用线性布局,在这个项目中我们采用线性布局,因为给我们的效果图里可以看到它里面的控件摆放位置都是比较整齐的,而且控件数目非常多,如果采用相对布局那要写很多限制条件,比如控件的大小,上下两控件之间的间距,左右间距,还要注意边角要留有缺口,不能全部覆盖,每个菜单栏都有自己的logo,用该采取透明,最上面的图标的距离要适中,不能随意摆放
源代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#3a3a3a">
<TextView android:id="@+id/xian"
android:layout_marginTop="30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="西安慕天科技有限公司"
android:textColor="#FFFFFF"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="320dp"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout android:layout_height="0dp"
android:layout_width="fill_parent"
android:layout_weight="4"
android:orientation="vertical"
android:background="@drawable/block4"
android:layout_margin="2.5dip" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品列表"
android:layout_marginLeft="25dp"
android:layout_marginTop="20dp"/>
</LinearLayout>
<LinearLayout android:layout_height="0dp"
android:layout_width="fill_parent"
android:layout_weight="3"
android:orientation="vertical"
android:background="@drawable/block3"
android:layout_margin="2.5dip"
>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="统计分析"
android:layout_marginLeft="80dp"
android:layout_marginTop="8dp"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="75dp"
android:layout_marginTop="0dp"
android:text="设置"
android:textSize="15sp"/>
</LinearLayout>
</LinearLayout>
<LinearLayout android:layout_height="fill_parent"
android:layout_width="0dp"
android:layout_weight="1"
android:orientation="vertical">
<LinearLayout android:layout_height="0dp"
android:layout_width="fill_parent"
android:layout_weight="3"
android:orientation="vertical"
android:background="@drawable/block2"
android:layout_margin="2.5dip"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="已选商品"
android:layout_marginLeft="70dp"
android:layout_marginTop="20dp"/>
</LinearLayout>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="数据维护"
android:layout_marginLeft="80dp"
android:layout_marginTop="8dp"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="75dp"
android:layout_marginTop="0dp"
android:text="数据录入"
android:textSize="15sp"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
图 2-1 菜单页面
项目开发
1、开发小型百度地图
1)、申请API key
在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址http://lbsyun.baidu.com/apiconsole/key,自己自行注册一个百度账号,很快就能申请到的。第一步:打开key申请网址,第二步:点击“创建应用”,进入API的创建与配置页面。Android安全码的组成规则为:Android签名证书的sha1值+";"+packagename(即:数字签名+分号+应用程序包名)。获取sha1值,点击“确认”创建成功。第三步:编辑与修改创建好的key可进行编辑或删除。点击key后的“设置”,再次进入创建页面,可对设置进行修改。当此key不再需要时可进行删除。然后就要新建Android项目 BaiduMapDemo,然后将百度地图API库加入工程
2)、然后是建立几个界面包括activit_main.xml, dingwei.xml, routplan.xml, jiansuo.xml, kaiji.xml来进行页面布局,在activit_main.xml中间加载百度SDK代码,
主界面如下图:
图 3- 1 主界面
3)、然后就是实现定位、线路、检索三种功能,点击定位按钮,跳转到定位界面实现定位,分别为行车路线、公交路线和步行,所构界面如图:
图 3-2 路线查找
4)、而包功能的代码是采用百度地图demo中的源代码,如个界面接口之间的主要代码:
下面代码实现定位功能,以及几个按钮的响应函数,
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null)
return;
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(u);
}
addrString = String.valueOf(location.getAddrStr());
mAddrTV.setText(addrString);
}
public void onReceivePoi(BDLocation poiLocation) {
}
}
public void setBtnsOnClick() {
((Button) findViewById(R.id.locateBtn))
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// 周边按钮响应函数
Intent intent = new Intent(MainActivity.this,
PoiSearchDemo.class);
startActivity(intent);
overridePendingTransition(R.layout.activity_enter,
R.layout.activity_exit);
}
});
((Button) findViewById(R.id.moreBtn))
.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// 更多按钮响应函数
Toast.makeText(MainActivity.this, 2000).show();
}
});
RelativeLayout waysBtn = (RelativeLayout) findViewById(R.id.waysLay);
waysBtn.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, Activity2.class);
startActivityForResult(intent, 200);
}
});
}
图 3-3 定位
以下主要代码实现周边搜索的功能。。
public void fixPosition() {
// 地图初始化
mBaiduMap.setMyLocationEnabled(true);
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(
LocationMode.NORMAL, true, null));
// 定位初始化
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(new MyLocationListenner());
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开GPS
option.setAddrType("all");
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(4000);
mLocClient.setLocOption(option);
mLocClient.start();
}
图 3-3 周边搜索
五、实习体会
我们每个人都存在着一种心态,都想走捷径,这就像一种侥幸心理。其实学习有没有捷径可以走呢?肯定是有的,我认为最短的捷径就是不要走弯路,这就已经是捷径了。前辈们常说:“欲速则不达”,这句话存在肯定是有它的道理的,所以我们不能浮躁,要静下心来做好自己该做的事就可以了。对于安卓开发,相信大多数人还是第一次接触,这个神秘的名词让很多人心存恐惧,很多人都会在心里存在这样一个念头“安卓好难哦,我怎么做的来?”所以,刚起步时会听到很多抱怨声。其实,不用怕,从学长的讲解中我们可以发现安卓开发并没有我们想象中的那么困难。信心是通往成功的第一步,试着给自己树立这样的信念“我可以的!”,给自己足够的信心,带着激情去攻克一个又一个难关,相信到最后大家完成自己的作品时会感概“原来安卓开发也不过如此,哈哈哈哈!”。记住,给自己信心,踏踏实实的做下去。
为什么要理论与实践相结合呢?只有理论是不够的,它要通过实践才能更好的理解,也只有有了理论才能更好的实践,做出更好的东西。比如我们现在要写一段程序,只有看了书我们才知道是一个什么样的格式,也只有通过我们来编写程序才能知道理论知识是否已经掌握。因此,我们不妨将学习分为六个阶段:预习---听课---复习---实践---找原因---再实践。有时候我在想,为什么老师能够将一段程序进行随意的更改,能够做到随心所欲呢?而我们自己该怎么学才好?其中的道理,我认为应在不懂的时候应该尽量自己想办法解决,实在没办法再去请教高手请教老师,这样印象会更深刻掌握起来也更加牢固,同时还能培养自己独特的编程思想。安卓开发也是一样一样的,实践是最好的学习方法,对于一个系统,不妨一个一个模块去实践去完成,不要一直停留在理论阶段。对于前天学长所讲解的知识,自然也不要以为自己听懂了,除非自己亲自把它做出来了才能说自己懂了。
在这个时代,我们都知道软件开发是一个带着光环的职业,那么软件开发之路好不好走呢?其实老鸟们都回答了我们这个问题,用他们的话说,软件开发之路就是:编程--编程--再编程。实际上也是在说这条路是很枯燥的,需要培养自己对它的兴趣,兴趣是我们能够坚持下去的动力,而不能紧紧将它作为一种谋生的手段,这样会很累,说实话也对不起自己。说到这里,怎样培养自己的兴趣呢?第一,多了解一些Android和编程上有趣的事。比如说多去论坛转转,我们会发现其实那些老鸟是很幽默的,他们在枯燥的世界里还寻求着属于自己的一份甜蜜;第二,要让自己对它充满渴望。很多同学也许有关于安卓开发的资料书,一开始看的时候由于什么也不懂所以看起来会觉得很枯燥,但是如果我们带着一种渴望去阅读去学习,我想我们很快就会发现其中的乐趣。这份渴望就是我们前进的动力,它会引导我们对开发之路的产生兴趣。
当前做的都是技术性,操作性的东西,不要总是问别人,自己总是有办法去解决问题,当然不能盲目的去做,要思考问题的原因。以后遇到这样的问题,先找原因,分析思路,网上找方案。同样是搜索资料,效率却不一样。同样的陈洪涛的文章,我花了很长时间才认识到它的重要性。搜的关键词要切主题,看资料的方式要正确,利用要一些重要的东西,比如博客下的讨论,可能有解决方案。学习是一个过程主义。以后解决问题的方法不再像书本上的学习了,书把问题已经全部列好,而生活中的问题可能是没有下一步的,有的只是你的思路和想法还有实践。而且这个过程不可避免,否则你是不会认识到问题的实质。当然有时候有人点拨一下豁然开朗是好的,但不可以一直依赖于别人解决问题。通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。例如: 要的布局(或者控件) ,在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳转Intent管理,通过Bundle对数据在界面之间进行传输。
在手机交互式通信服务中,学习了Android手机之间进行短信发送、广播、对广播的监听、服务等,在Service类中没有context,可以通过Handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的CurrentActivity这个变量进行控制,进行处理。 在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。Android系统是基于Linux的手机操作系统平台,要深入系统的学习Android,不仅仅是有Java和Android应用开发,必须要具备Linux,C/C++高级编程才能深入的涉及Android Framework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。
通过Android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。感谢NIIT这次的充电机会。
20##年10月13日 星期一 天气晴
今天第一天,经过昨天的一路奔波,感觉有点疲惫,八点钟开始早自习背诵,背诵完差不多到九点的时候突然教室来了许多像领导一样的人物,接着老师就说要举行欢迎仪式,经过主持人的介绍后,第一个发言的是NIIT的一个经理,看起来四十出头,语速缓慢有调,有着明显的领导发言特色,但是他讲的内容我觉得很务实,他说一个人的软实力很重要,并且他分析了重要的原因,他说企业招聘需要的是人才,是有用之才,而有用更多的取决于自身的沟通能力和表达能力,因为你的才能表现出来才能被企业所利用,否则你的才能用不了那就不叫人才,叫什么废才,所以他觉得我们大学生更重要的是培养自己的表达能力,注重自己的基础知识,而不要好高骛远,然后主持人还介绍举行欢迎仪式是为了对于我们实习的肯定,这些解读我都非常赞同。
20##年10月14日 星期二 天气晴
今天老师讲了开发安卓环境的搭建,讲到关于开发安卓最基础的认识,说安卓的最底层架构是采用linux然后结合Java语言,所以安卓的开发要有一定的Java基础,但是没有也没关系,因为安卓的开发相对来说比较简单,只要大概的逻辑框架搞懂,基本的开发不成问题,只要耐心去学还是可以学的很好,还有他提到对于英语的要求,因为安卓是由国外的公司谷歌发明的,所以它里面的语言全是英语,想要把安卓开发学的很精通,那必须要对英语基础知识要学好,这样你开发起来才很轻松,上手也很快、很容易,还有他讲了安装谷歌提供的开发工具ADT时,必须要装JDK,然后结合eclipse,安卓的开发环境就算搭建好了。
20##年10月15日 星期三 天气晴
今天老师讲了如何创建安卓模拟器,以及在创建过程中需要了解的基础知识,比如怎么选择安卓开发版本,怎么选择参数,比如屏幕的大小,分辨率的大小,要给多少内存,还要分配存储空间,以及安卓不同版本之间是如何兼容的,然后他又讲了包名的命名规则,当模拟器创建完毕后就可以开始写第一个安卓程序了,书写非常简单,按照提示一步步完成操作后,就相当于写好了一个简单的安卓应用程序,然后将它运行,讲到这里,老师又讲了运行安卓程序的很多方法,比如用快捷键,用标题栏下面的工具栏,还可以找到创建好的程序的包,然后右键点击包名,在出现的对话框里,选择运行就可以了,然后你可自己定义,然后继续运行,程序就会不断更新。
20##年10月16日 星期四 天气晴
今天老师讲了Activity是Android组件中最基本也是最为常见用的四大组件之一。它是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。当一个 Activity 实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。他还说,activity有四种状态,分别是运行状态、暂停状态、停止状态、杀死状态,理解了这些状态,也就理解了一大半。
20##年10月17日 星期五 天气晴
今天老师讲了很多,还讲了他给我们安排的作业,作业是一个关于购物的app,首先第一个要完成的就是购物应用的菜单,这个菜单可以分三大块,每一块都有不同的布局,背景颜色也各不一样,里面有九种背景,八个项目选择,每个项目上都要实现文字标识,每个标识都有各自象征性的logo,而且每个项目之间的间距要一致,他们的上下位置关系,左右位置关系要按照参考图片上的完成,不能出现偏差,每个选择栏的边角要协调一致,不能有的是圆的,而有的是方的,强调了这些注意细节后,老师还检查了同学们的完成情况,最后选出了几位实现程度较好的作业给大家进行了展示,并让那些同学阐述自己的思路,然后他还提问了一些问题,当那些同学回答不完整的时候,他还进行做了补充,感觉很有启发性。
20##年10月20日 星期一 天气晴
今天老师让我们开始做项目,然后项目的内容就是按照自己的喜好写一个地图,可以参照百度地图,也可以参照高德地图,名字可以自己起,越个性化越好,他说之前来参加培训的同学也很多,他们也开发了自己的地图,有的同学的地图很时髦,界面很花哨,很有吸引力,第一次看可能感觉不到是地图,但是你仔细观看后觉得还是像一个地图的,其实,在开发过程中大家可以参照一下谷歌地图,因为谷歌地图是行业当中技术比较成熟的应用,地图包含地标、线条、形状等信息,提供矢量地图、卫星照片、地形图等三种视图。功能有周边搜索,规划路线,分类搜索,街景服务等,老师也要求我们尽量能够实现这些功能,然后老师还让我们分组,五人一组,按小组完成项目开发。
20##年10月21日 星期二 天气晴
项目开始第一天,我们首先写的是布局,布局有很多种,比如常用的线性布局、相对布局、绝对布局、表格布局,等等。其中相对布局Relative Layout是大家比较常见的一种布局,Relative Layout按照各子元素之间的位置关系完成布局。在此布局中的子元素里与位置相关的属性将生效。例如android:layout below, android: layout above, android: layout center Vertical等。注意在指定位置关系时,引用的ID必须在引用之前,先被定义,否则将出现异常。Relative Layout是Android五大布局结构中最灵活的一种布局结构,比较适合一些复杂界面的布局。使用过程中会出现需要不断修改的情况,因为相对布局最大的特点是各控件的位置相对的,如果各控件之间的位置相互关联,那么只要一个控件的位置有变动,其它的都要变。
20##年10月22日 星期三 天气晴
项目进行第二天,但我们组还是没有思路,大家都很迷茫,到底应该开发一个什么样的地图,到底怎么阐述我们的想法,到底怎么体现我们的创意,无奈中我先熟悉了一下布局,在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳转Intent管理,通过Bundle对数据在界面之间进行传输。
20##年10月23日 星期四 天气晴
今天遇到一个问题,在动态生成控件的时候,Id的赋值就是一个,以后在进行编辑的时候需要更具这个Id来查找控件,然后再获取其中的值。还有就是控件在生成的时候是需要生成一个TextView还是一个EditText,还是Spinner或者是ListView等等这些要更模型中的数据类型来生成,这到不是很难,难的就是我们在生成一个Spinner的时候我们需要为其绑定数据源,对于数据的来源我们该怎样获得,不能写死,要是写死的假如界面的元素添加新的了,或是删除了代码需要重新改写,这又是一个难题,我的办法就是把String-array的名字以要生成的控件的Code来命名,,Android中能否支持根据名字来找到相应的Id呢,这又让我头疼,问题总是这样,一个问题解决了总是会带出其他的问题,没办法只能查看API,网上找解决办法,这时幸运的找到了。
20##年10月24日 星期五 天气晴
今天是完成项目的最后一天,但是我们还是遇到了很多问题,在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,我们可以通过一些公用的方法写个BaseActivity这个基类,通过继承方式比较不错的实现了Activity的界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳转Intent管理,通过Bundle对数据在界面之间进行传输。同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的Current Activity这个变量进行控制,进行处理。