实习报告书
专 业 计算机科学与技术 系 别 报告题目 安卓 报告人 班 级 指导教师 带队教师 实习时间 实习地点
教务处监制
实习目的: 暑期实训是计算机科学与技术专业学生的一门主要实践性课程。其目的是使学生们进一步加深对所学知识的理解,理论联系实际,巩固所学有关计算机基础理论知识和基本技能,学习有关计算机最新技术方面的应用,增强学生对计算机在社会生活,社会生产中应用的感性认识,深入了解计算机在各个领域中的应用状况。 生产实习是学校教学的重要补充部分,是区别于普通学校教育的一个显着特征,是教育教学体系中的一个不可缺少的重要组成部分和不可替代的重要环节。它是与今后的职业生活最直接联系的,学生在生产实习过程中将完成学习到就业的过渡,因此生产实习是培养技能型人才,实现培养目标的主要途径。它不仅是校内教学的延续,而且是校内教学的总结。生产实习一方面巩固了书本上学到的理论知识,另一方面,可获得在书本上不易了解和不易学到的生产现场的实际知识,使我们在实践中得到提高 实训环节对于提高学生的综合能力和全面素质具有重要意义。 实习任务概述: 1.面向对象编程(封装,继承,多态)。 2.this关键字使用,JavaBean定义规范以及作用 3.方法的重载(overLoading),构造方法的作用 4.package(创建包)import(导包)的使用以及作用 5.super关键字使用 6.方法的重写(override) 7.访问修饰符(public,protected,默认,private)的使用 8.static修饰符的作用及用法 9.final修饰符的作用及用法 10.抽象类(abstract)的定义和特点以及使用 11.接口(interface)的定义 12.接口的实现(implements) 13.接口和抽象类的区别 14.对象包装器,装箱和拆箱的使用 15.数组的使用。 16.String类,StringBuffer类,StringBuilder类的使用以及三者之间的区别 17.JavaSE API的使用。 18.日期类Date,SimpleDateFormat的使用,数学类Math和Random类的使用 19.异常的处理(try,catch,finally,throw,throws)。 20.Java中的集合类(List,Map,Set接口的使用以及Properties属性文件的操作) 21.编写音乐播放器应用 22.编写电话及短信应用 23.编写SD卡存取应用 实习所用软件简介: Eclipse Eclipse 是一个开放源代码的、基于java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。 虽然大多数用户很乐于将 Eclipse 当作 Java IDE来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。 JDK JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。 JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK(Software development kit)。 JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码 jar – 打包工具,将相关的类文件打包成一个文件 javadoc – 文档生成器,从源码注释中提取文档 jdb – debugger,查错工具 JDK中还包括完整的JRE(Java Runtime Environment,Java运行环境),也被称为private runtime。包括了用于产品环境的各种库类,以及给开发员使用的补充库,如国际化的库、IDL库。 JDK中还包括各种例子程序,用以展示Java API中的各部分。 NPP Notepad++的缩写 Notepad++ 是一款Windows环境下免费开源的代码编辑器。 android-sdk SDK:(software development kit)软件开发工具包。被软件开发工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。 Android SDK 指的既是Android专属的软件开发工具包。 实习内容及步骤: 1、音乐播放器 代码如下: android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\" android:orientation=\"vertical\" android:paddingTop=\"10dip\" > public class MediaPlayerActivity extends Activity { Private final static String TAG = \"MediaPlayerActivity\" ; private ProgressBar pbPosition ; private ImageButton ibtnLast ; private ImageButton ibtnPlay ; private ImageButton ibtnNext ; private MediaPlayer player ; // 播放音乐对象 private boolean playing = false ; // 播放状态 private boolean pause = false ; // 暂停状态 private boolean stop = true ; // 停止状态 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化 init() ; } // 初始化 private void init() { // 初始化控件 // 设置 View.OnClickListener listener = new MyClickListener() ; // 初始化播放器 player = new MediaPlayer() ; try { String path = Environment.getExternalStorageDirectory().getAbsolutePath() + \"/02.mp3\" ; player.reset() ; player.setDataSource(path) ; player.prepare() ; player.seekTo(0) ; } catch (Exception e) { Log.w(TAG, e.getMessage()) ; e.printStackTrace() ; } } // 播放音乐方法 private void play() { // 缓冲数据 try { player.start() ; playing = true ; // 处于播放状态 stop = false ; // 停止状态设置为false } catch (Exception e) { Log.w(TAG, e.getMessage()) ; } } // 暂停音乐方法 private void rePlay() { if(pause) { // 音乐处于暂停状态 player.start() ; pause = false ; playing = true ; } } // 暂停音乐方法 private void pause() { if(playing) { // 如果音乐正在播放 player.pause() ; pause = true ; playing = false ; } } @Override protected void onDestroy() { if(!stop) { player.stop() ; player.reset() ; player.release() ; player = null ; } super.onDestroy(); } // 自定义按钮类 private final class MyClickListener implements View.OnClickListener { @Override public void onClick(View v) { int id = v.getId() ; switch(id) { break ; if(stop) { // 停止状态 play() ; } else if(pause) { // 暂停状态 rePlay() ; } else if(playing) { // 播放状态 pause() ; break ; break ; } } } } 界面如下: 2、拨号与短信功能 代码如下: 电话功能 android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\" android:orientation=\"vertical\" > public class CallPhoneActivity extends Activity { private EditText etPhoneNumber ; private Button btnCallPhone ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化控件 init() ; } /** * 初始化控件 */ private void init() { // 查找控件 View.OnClickListener listener = new ClickListener() ; // 注册监听者/观察者 btnCallPhone.setOnClickListener(listener) ; } private final class ClickListener implements View.OnClickListener { public void onClick(View v) { // 定义一个拨打电话的意图 Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(\"tel:\" + etPhoneNumber.getText().toString())) ; // 将意图发送给Android操作系统 startActivity(intent) ; } } } 短信功能 android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\" android:orientation=\"vertical\" public class SmsSendActivity extends Activity { // 电话号码控件 private EditText etPhoneNumber ; // 短信内容 private EditText etSmsContent ; // 发送按钮 private Button btnSendSms @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化控件 init() ; } /** * 初始化控件 */ private void init() { // 查找三个控件 // 为按钮添加点击事件 View.OnClickListener listener = new ClickListener() ; } // 按钮单击事件实现类 private final class ClickListener implements View.OnClickListener { public void onClick(View v) { // 得到要发送给的电话号码 String phoneNumber = etPhoneNumber.getText().toString() ; // 得到要发送的短信内容 String smsContent = etSmsContent.getText().toString() ; // 得到一个短信管理器对象 SmsManager smsManager = SmsManager.getDefault() ; // 一般一天短信内容为70个字符,如果超过70字符,那么就需要把短信内容分割一下,然后逐条发送 ArrayList smss = smsManager.divideMessage(smsContent) ; // 发送短信,将分割后的短信逐条发送 for(String sms : smss) { // 发送短信 smsManager.sendTextMessage(phoneNumber, null, sms, null, null) ; } Toast.LENGTH_SHORT).show() ; } } } 界面如下: 3、SD卡读写文件 代码如下: 读取文件 android:layout_width=\"fill_parent\" android:layout_height=\"fill_parent\" android:orientation=\"vertical\" > public class SDCardReadFileActivity extends Activity { private EditText etFileName ; private Button btnReadFile ; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化控件 init() ; } // 初始化控件 private void init() { // 设置按钮点击 public void onClick(View v) { String result = readFile() ; Toast.makeText(SDCardReadFileActivity.this, result, Toast.LENGTH_LONG).show() ; } }) ; } // 读取文件 private String readFile() { if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { // SDCard存在 String fileName = etFileName.getText().toString() ; File file = new File(Environment.getExternalStorageDirectory(), fileName) ; ByteArrayOutputStream outStream = new ByteArrayOutputStream() ; InputStream inStream = null ; try { inStream = new FileInputStream(file) ; byte[] buffer = new byte[1024] ; int len = -1 ; while(-1 != (len = inStream.read(buffer))) { outStream.write(buffer, 0, len) ; } return new String(outStream.toByteArray()) ; } catch (FileNotFoundException e) { return \"~~~\" + e.getMessage() + \"~~~\" ; } catch (IOException e) { return \"~~~\" + e.getMessage() + \"~~~\" ; } finally { if(null != inStream) { try { inStream.close() ; } catch (IOException e) { return \"~~~\" + e.getMessage() + \"~~~\" ; } finally { inStream = null ; } } if(null != outStream) { try { outStream.close() ; } catch (IOException e) { return \"~~~\" + e.getMessage() + \"~~~\" ; } finally { outStream = null ; } } } } else { return \"~~~Sdcard不存在~~~\" ; } } } 写入文件 public class SDCardWriteFileActivity extends Activity { private EditText etFileName ; // 用于获取文件名 private EditText etFileContent ; // 用于获取文件内容 private Button btnWriteFile ; // 提交按钮,点击按钮会将文件内容写入指定文件名的文件 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化控件 init() ; } // 初始化控件 private void init() { // 为按钮注册点击事件 public void onClick(View v) { String result = writeFile() ; // 显示Toast提示 Toast.makeText(SDCardWriteFileActivity.this, result, Toast.LENGTH_LONG).show() ; } }) ; } // 写文件 private String writeFile() { // 1. 得到文件名称 // 2. 得到要写入文件的文件内容 // 3. 判断是否有SDCard if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { Filefile= new File(Environment.getExternalStorageDirectory(), fileName) ; OutputStream outStream = null ; try { outStream = new FileOutputStream(file) ; outStream.write(content.getBytes()) ; outStream.flush() ; return \"写入文件成功\" ; } catch (FileNotFoundException e) { return e.getMessage() ; } catch (IOException e) { return e.getMessage() ; } finally { if(null != outStream) { try { outStream.close() ; } catch (IOException e) { e.printStackTrace(); } finally { outStream = null ; } } } } else { return \"SDCard卡不存在!~\" ; } } } 界面如下 4、登陆界面 public class LoginClientActivity extends Activity { private EditText etUsername ; private EditText etPassword ; private Button btnLogin ; private Button btnCancel ; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 初始化控件 init() ; } private void init() { // 注册 public void onClick(View v) { String username = etUsername.getText().toString() ; String password = etPassword.getText().toString() ; // 登录 String result = login(username, password) ; if(\"ok\".equals(result)) { result = \"登录成功!\" ; } else { result = \"登录失败!\" ; } Toast.makeText(LoginClientActivity.this, Toast.LENGTH_SHORT).show() ; } }) ; public void onClick(View v) { etUsername.setText(\"\") ; etPassword.setText(\"\") ; result, } }) ; } // 登录 private String login(String username, String password) { Socket socket = null ; OutputStream outStream = null ; InputStream inStream = null ; try { outStream = socket.getOutputStream() ; // 向服务器发送数据 outStream.write((username + \";\" + password).getBytes(\"UTF-8\")) ; outStream.flush() ; inStream = socket.getInputStream() ; byte[] data = StreamUtil.readByteArray(inStream) ; return new String(data, \"UTF-8\") ; } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(null != inStream) { try { inStream.close() ; } catch (IOException e) { e.printStackTrace(); } finally { inStream = null ; } } if(null != outStream) { try { outStream.close() ; } catch (IOException e) { e.printStackTrace(); } finally { outStream = null ; } } if(null != socket) { try { socket.close() ; } catch (IOException e) { e.printStackTrace(); } finally { socket = null ; } } } return \"\" ; } } 界面如下 实习日程安排: 时间 7.2-7.6 7.7-7.11 7.12-7.16 7.17-7.20 7.21 实习内容 安装熟悉Eclipse软件 学习用Eclipse编写java文件 将android___SDK导入Eclipse软件 编写android程序,完成几个应用程序的编写 编写实习报告 实习体会: 时间过的飞快,二十天的实训马上就要结束了。在这次实训中我不仅学习了相关的专业知识,而且让我对Android系统有了一个更加深入的了解,它也是我们计算机专业的一个新的方向并且发展很迅速,为了今后的发展我们还需不断努力学习!我国的信息产业还很落后,随着社会的发展及国家的支持,手机上网必然是社会发展的趋势,到时候手机上网将会无处不在!赚钱我对Android系统的了解只停留在应用的层次上,对于更深层次的了解是很少的,通过这次实习让我对Android系统有了一个鞥神层次的了解,同时它也使我意识到无论朝哪个方向发展,主要还是得扎实、深刻的学习,同时也得不断努力探索。 IT业的发展速度一直都是相当惊人的,不想被社会淘汰,我们就必须得不断的学习,现在的社会不再是一劳永逸,其它行业也是如此,我们必须不断的拿知识来武装自己,不然被淘汰那是肯定的!现在就业难的原因其实在于竞争的加剧,为了在竞争中取得成功,我们必须时时刻刻学习! 在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。Android系统是基于Linux的手机操作系统平台,要深入系统的学习Android,不仅仅是有Java和Android应用开发,必须要具备Linux,C/C++高级编程才能深入的涉及Android Framework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。 由于这次实习时间较短,对于Android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的Activity忘记注册,对SD卡存取需要权限,在写SQL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。 通过对java以及Android的学习,让我又学会了一门编程语言,这对于我以后的学习工作都会有很大的帮助。 回顾以前所走的路,太多的是无奈和迷茫,这次实训就像是我人生道路上的航标,为我指明了前进的方向,使我对自己的前途充满了信心,同时也知道了自己的前进方向。 指导教师评语: 成绩: 指导教师(签名): 年 月 日