android工作心得体会十二篇
Android是一个以Linux为基础的半开源操作系统,主要用于移动设备,由Google和开放手持设备联盟开发与领导。下面是带来的android培训的心得体会,仅供参考。
android培训心得体会一:
现在对于Android的学习已有斗个学期了,但它对我来说其实还是一个大大的谜,还有待我去对它一一揭晓。
在还没有学习Android这门课之前,当听到别人谈到它时,知道它离我们很近,但是它给我的感觉却是那么的神奇,一直就是在听说着关于Android系统怎么怎么的新闻,知道它就在我的生活中,离我很近,我也在用它,但还是总有一种很遥不可及的感觉,觉得它不在我的思想里,所以呢,对于这门课《Android系统开发与实践》的学习很是期待的。
在上一个学期快要结束的时候,就听到老师说了一下,说下一个学期我们可能会学习Android系统的开发,他还说这个Android系统的开发很值得学习,很值得我们去探索,说这个Android还一直在开发中,是一项很好玩的系统,当时就很是兴奋了,总是会在想Android系统到底是怎样的,它是如何的深入我们的生活,又是如何的到我们所用的这些设备当中的,这一切都让我感到很好奇。就这样带着一系列的问题走进了 这个学期,终于就要与它见面了,这门课也就在这样的背景下,这样的一种环境下走进了我的课堂,它给了我一种兴奋感,对于它的出现,我很是期待的,一开始老师就给我们讲解了一些关于Android的知识,也给我们展示了Android系统开发的平台,真的给了我一种奇妙的感觉,它不仅有编译,它还有一个模拟器,就和我们用的手机一模一样,上面也有简单的几个图标:电话、短信等等,真的感觉到了不可思议,感觉到一种神秘,Android系统的开发就是在这样的一个平台上完成的,你可以对它进行你想要的修改,只要是你想到的,你都可以支尽情的尝试,这让人兴奋。
这门课的学习从这里就这样开始了,《Android系统开发与实践》这本课本它是以讨论Android系统平台为基础,并结合实例讲解教程和实践指导类教材。本书中全方位的讲解了Google开放移动应用平台Android的各种特性,深入探讨了应用程序的基本组件、界面布局的基础,结合Internet实现通讯录的设计和发送短信实例详细介绍了Android系统平台开发的步骤和方法,从而实现对Android系统的平台开发的深入了解。
android
基于嵌入式技术的Android是目前增长速度最快的智能3G手机操作系统,其底层系统是以Linux内核为基础,用C语言开发;中间层包括函数库library和虚拟机Dalvik,用C++语言开发;上层应用软件,包括通话程序,短信程序等,用Java语言开发。所以,要想好好的学习Android系统的开发,那就必须掌握C++和Java语言,它们都是基础。
Android学习并不是那么的容易,你得很努力很认真的去学习,但如果只是浅浅的了解,那就简单得多,但并不是这样的,你得更加深入的去学习,你才算是懂一点。
Linux是Android开发的基础,Linux是一套免费使用和自由传授的类UNIX操作系统,它速度快,运行稳定,对硬件的配置要求低,兼具了其他系统的优点,最关键是可以免费使用,所以Linux得到了迅猛的发展,我们学习Android的开发就得了解Linux,它常用的一些操作命令是我们必须要理解和掌握的,比如说:su命令,它是最基本的命令之一,常用于不同用户间切换。例如,如果登录用户为user1,要切换为user2,则用如下命令——$su user2 就行了;pwd命令,用于显示用户当前所在的目录;cd命令,不仅显示当前状态,还改变当前状态,它的用法跟DOS下的cd命令基本一致;ls命令,它跟DOS下的dir命令一样,用于建立磁带备份系统,目前广泛用于建立文件发布档案;gzip命令,用于压缩文件;mkdir命令,用于建立目录,跟DOS下的md命令用法几乎一样的;cp命令,用于复制文件或目录;rm命令,用于删除文件或目录;mv命令,用于移动文件和更多文件;reboot命令,重启命令;halt命令,关闭命令。这些都是我们学习Android系统所必须掌握的。
Android系统的开发更离不开Java,Java是一种简单的,面向对象的,分布式的,解释执行的,健壮的,安全的,结构中立的,可移植的,高效率的,多线程的和动态的语言,Java在Android平台开发中的应用起到了很关键的作用,Android的开发需要Java的上引动开发工具,Eclipse开发工具就是目前最主流的Java开发工具,Eclipse本身只是一个框架平台,
但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性,许多软件开发商以Eclipse为框架开发自己的IDE。
Android的学习真的不是那么容易的,就一个平台的搭建就已经难到了我,就这样一个开发平台它得有一个Java的环境,还要有IDE等等,花了一大半的时间终于搭建了一个框架,它的一些插件必须要在线的升级,就是说必须要有网才行,这是一件很难熬的事,但等到搭建好后,那是一种成就感,通过学习让我知道了Android系统也有它的不足之处:安全和隐私,由于手机与互联网的紧密联系,个人隐私很难得到保护,互联网的深入发展也将会带来新一轮的隐私危机;运营商仍然能够影响到Android手机;同类机型用户减少:在不少手机论坛都会有针对某一型号的资源,而对于Android平台手机,由于厂商丰富,产品类型多样,这样使用同一款机型的用户越来越少,缺少统一机型的程序强化;过分依赖开发商,缺少标准的配置等等的,这些的不足都在等待我们去探索。
Android系统平台的结构有:应用程序层,应用程序框架层,运行库层,Linux内核层。只有了解了这些才能助我们更好的学习Android系统,Android系统开发的相关环境必须安装并配置好,这是一个细活:第一得安装Java环境,然后还得修改Javadoc的link。第二设置环境变量,第三就安装repo,第四得在线下载Android源码并更新,第五是编译Android源码并得到~/project/Android/cupcake/out目录,第六在模拟器上运行编译好的Android源码,第七编译linux kernel,第八是编译模块,第九编译SDK。这个安装步骤我们得一步一步的做好 ,如果有哪一步做错了,就会影响到最终的结果。当你把所有的准备工作做好后,创建一个新的Android项目,你就会有一点点的兴奋与成就感,那是一种很自豪的一种享受。
在Android系统的开发过程当中我们要了解和熟悉源码的获得,源码树结构分析、Android源码简要分析、还有Android的移植,作为一个Android开发者,必要的时候阅读下Android源码可以拓宽一下自己的视野和对Android的认知程度,Google的Android的源
码管理仓库用的是Git。Android是一个开源手机终端系统,基于Linux内核,我们可以下载一个Git客户端,在Windows下安装Git的客户端软件很方便的,安装完成后,我们建立一个文件夹,就可用于存放将要下载的源码,主机编译工具和仿真环境,对于这些目录和文件我们还要求会背下来,但得了解,了解它们是我们学习Android系统开发更加的轻松了。
要想学习好Android系统的开发,我们光学一些理论性的知识,那是远远不够的,我们得把理论与实践结合起来,才能起到事半功倍的效果,本来对于Android系统开发的学习就应该从实践当中去深入的,在学习的过程中,我们要有足够的耐心和足够的时候,去练习,去实践。在这门课当中的实例,比如,打电话,就让我们眼前一亮了,我们一直以来每天在做的打电话就是这样来的,这个实例提起了我们对Android系统的又一兴趣,Android系统的开发不仅给我们的生活带来了便利,也给我们带来了欢乐。
这以上就是这一段时间来我对Android系统开发的学习的一个总结与一个体会,Android系统的开发真的让我长了不少的知识,也带来了不少的见识,虽然我对于它的掌握还不那么的深,学习的也还不足,但我还是会一直坚持的学习下去,因为它的奇妙,因为我们的生活需要它,它的开发是永无止境的,它的学习也将是永无止境的。
android培训心得体会二:
非常高兴能够参加清华大学的Android暑期培训,感谢老师们对我们的教导和关心,在短短一个月的时间里我学到了Java、数据库、Android、JSP等知识。最重要的是通过这次培训我对Java开发和Android开发有了一个正确的方向,对Android有了新的认识。
在培训前十几天主要进行的是对Java和数据库等相关技术的学习和普及,然后才是学习Android开发,最后几天我们独立完成在线点餐的应用开发,虽然逻辑比较简单,从最简单的开始,注册用户,用户登录,再到选菜,提交,这些看似简单的流程里面却有很多细节需要我们注意,因为将来到真正实际操作的时候是不允许程序出差错的,一个细小的差错可能就会造成非常大的损失。
培训的内容涵盖的知识面非常广也比较全面,确实学到了不少东西,这次培训,我们更多学到的是不懂就问和自己应该尽自己的全力去尝试,哪怕失败,只要自己尽自己的全力,和身边同学一起探讨而不是抄袭,团结合作,发挥团队意识,最后在自己的努力下,终于运行成功,这种成就感美不可言,心情愉悦至极。这次培训给了我很多收获也给了我很深的感触,科技的力量不可小觑,IT技术的飞速发展给我们的生活和工作带来了无比的快捷,原来需要人工完成的工作、业务现在只需要点点手机即可完成。
最后终于要结束了,大家都有种释怀的感觉,当然我想我更多的是兴奋和自己掌握了知识之后的饱满感,学知识就像吃东西一样,吃饱了就应该好好的消化。要不断的温习和运用,做到举一反三,将所学知识充分融入到平时的学习生活中 去,为以后的工作做好坚实的基础。感谢学校和老师能够为我们提供这次机会,让我们更好的掌握和了解Android这门语言。
android培训心得体会三:
刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的Android SDK开发范例大全中的例子以及Android提供的APIDEMOS进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。
我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。
通过半个月的android实习,基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习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,CC++高级编程才能深入的涉及Android Framework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。
由于这次实习时间较短,对于Android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的Activity忘记注册,对SD卡存取需要权限,在写SQL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。
通过Android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了Android应用程序的开发,以及加深了对Java的认识。
最后,通过实习,我收获了很多东西,特别是编程方面的,这对即将毕业的我们来说,这次实习是一次较为珍贵的充电。
项目总结
时间过的好快,为期三个月的实训生活即将结束了,每一次的实训我们都受益匪浅,我们学到的不仅仅是课内还有课外,实训让我们的课内知识得到了巩固,专业知识、编程水平都有很大的提高,我们非常感谢这次实训。
刚开始二周的高强度的课程安排让我们受益匪浅;
接下来的项目实训又让我们可以巩固了课程。这让我觉得实习生活充实而有意义。
乐淘购物项目和android优化大师,我更好的学习了ui的设计,如何使界面漂亮,美观,巩固了listview,gridview,的使用,学会了动画进入界面的,和会移动的画廊等等。在这两个项目中,除了让我明白工作中需要能力,素质,知识之外,更重要的是学会了如何去完成一个任务,懂得了享受工作。当遇到问题,冷静,想办法一点一点的排除障碍,到最后获取成功,一种自信心由然而生,这就是工作的乐趣。有时候也需要虚心请教,从别人的身上真得能学习到不自己没有的东西,每一次的挫折只能使我更接近成功。
音乐播放器项目,我们是七个人组成小组完成的,由组长带领我们,分配任务,每个人,都发挥自己的长处,更好地去完成任务。对于团队开发来说,团结一致使我深有体会。团队的合作注重沟通和信任,不能不屑于做小事,永远都要保持亲和诚信,把专业理论运用到具体实践中,不仅加深我对理论的掌握和
运用,还让我拥有了一次又一次难忘的开发经历,这是也是实训最大的收获。
这次实训对于我以后学习、找工作也真是受益菲浅,在这3个月中让我初步从理性回到感性的重新认识,也让我初步的认识这个社会,对于以后做人所应把握的方向也有所启发!相信这些宝贵的经验会成为我今后成功的重要的基石。
在此,我非常感谢指导老师和同学对我的帮助。篇二:android实训报告
通信与电子信息专业实训报告
项目名称:基于android的游戏开发
班 级 10通信1班
姓 名
学 号
指导教师
成 绩
实训时间:年月日—
目录
一、实训目的及其意义 ............................................3 1.1、目的及意义..............................................3 1.
2、研究现状................................................3
二、实训主要任务、重点及难点 ....................................4 2.1、任务....................................................4 2.
2、重点内容及实现途径......................................4
三、实训具体内容及完成的主要工作 ................................5 3.1、认识基础开发............................................6 3.
2、了解数据存储............................................6 3.3、总体实训过程............................................7
四、实际遇到的困难,解决问题的方法和措施 ........................8
(一)、所遇问题 .................................................8
(二)、解决方法与措施 ...........................................9
五、心得体会 ....................................................9
一、实训目的及其意义 1.1、目的及意义 了解现阶段互联网发展主流,了解移动互联网,认识移动互联网的发展与展望,认识android,了解基于android的应用软件开发方法及其商业流程。把理论与实际结合,通过对理论知识的理解,领悟从而运用到生活实际巩固所学的知识,提高对实际生活的认识,积累经验。使学生在此期间能够初次体会到实际生产中的种种技能与经验,完成一项项目锻炼独立思考及团队合作能力。使学生们进一步加深对所学知识的理解,理论联系实际,巩固所学有关计算机基础理论知识和基本技能,学习有关计算机最新技术方面的应用,增强学生对计算机在社会生活,社会生产中应用的感性认识,深入了解计算机在各个领域中的应用状况。生产实习是学校教学的重要补充部分,是区别于普通学校教育的一个显著特征,是教育教学体系中的一个不可缺少的重要组成部分和不可替代的重要环节。它是与今后的职业生活最直接联系的,学生在生产实习过程中将完成学习到就业的过渡,因此生产实习是培养技能型人才,实现培养目标的主要途径。它不仅是校内教学的延续,而且是校内教学的总结。生产实习一方面巩固了书本上学到的理论知识,另一方面,可获得在书本上不易了解和不易学到的生产现场的实际知识,使我们在实践中得到提高实训环节对于提高学生的综合能力和全面素质具有重要意义。
1.
2、研究现状 android 是google开发的基于linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序 —— 移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍。google与开放手机联盟合作开发了 android,这个联盟由包括中国移动、摩托罗拉、高通、宏达电和 t-mobile 在内的 30 多家技术和无线应用的领军企业组成。google通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统。
android主要使用于移动设备,如智能手机和平板电脑,由google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。android操作系统最初由andy rubin开发,主要支持手机。2005年8月由google收购注资。2007年11月,google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良android系统。随后google以apache开源许可证的授权方式,发布了android的源代码。第一部android智能手机发布于2008年10月。android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,android在全球的市场份额首次超过塞班系统,跃居全球第一。
2012年11月数据显示,android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。目前基于android的移动终端上的软件应用开发很火热,android平台的开发已越来越强大。
android是一种以linux为基础的开放源码操作系统,主要使用于便携设备。android操作系统最初由andy rubin创办,最初只支持手机。2005年由google收购注资,并拉拢多家制造商组成开放手机联盟(open handset alliance)开发改良,逐渐扩展到到平板电脑及其他领域上。
二、实训主要任务、重点及难点 2.1、任务
认识移动互联网,了解移动互联网的开发,认识及了解android,在给定时间内完成基于android平台的游戏项目的开发,实现预想游戏效果,熟悉项目开发的商业流程,给出游戏全套文档及代码。
2.2、重点内容及实现途径 2.2.
1、重点内容:熟悉游戏开发代码,了解项目流程,对android游戏开发有基本了解。 2.2.2、实现途径:
所需运行硬件环境:
安卓系统2.2以上 3.5寸以上移动设备
软件开发环境的配置:
(1) 配置java程序开发环境
(2) 安装并汉化eclipse(jdk)
(3) android sdk的安装
(4) adt的安装及配置
(5) android模拟器的配置
(6) office2003以上版本的软件(绘图visio) 然后运用eclipse完成项目代码的编写,运行与调试;
最终在实体终端上进行测试,最终完成项目
三、实训具体内容及完成的主要工作
实训前期,有老师给我们讲解了现阶段移动互联网的发展,了解移动互联网的发展主流,说明了现阶段移动互联的发展重要性。老师着重给我们讲解了android的发展,以及现阶段移动互联中android所扮演的角色。接下来我们将针对基于android的游戏开发进行学习,由于时间的原因,我们主要了解了一下游戏开发的基本项目流程,具体的操作将在实训过程中一一讲解验证。
接下来老师为我们讲解了实训的具体内容,对于一个游戏开发项目,首先我们需要进行游戏开发的前期准备,主要是游戏开发环境的配置,以及团队开发过程中的任务分配,之后紧张的游戏项目开发拉开了帷幕。在第一天我们主要学习了eclipse软件的使用,包括游戏工程的创建等等。并且针对eclipse中的 android项目结构进行了讲解:android项目结构:src/ java原代码存放目录 gen/ 自动生成目录 gen 目录中存放所有由android开发工具自动生成的文件。目录中最重要的就是r.java文件。
这个文件由android开发工具自动产生的。res/ 资源(resource)目录 在这个目录中我们可以存放应用使用到的各种资源,如xml界面文件,图片或数据。aets资源目录android除了提供/res目录存放资源文件外,在/aets目录也可以存放资源文件。androidmanifest.xml 项目清单文件 。篇三:android实习心得 android实习心得
刚开始接触android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的android sdk开发范例大全中的例子以及android提供的apidemos进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。
我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。
1通过半个月的android实习,基本掌握了android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。
2通过学习android的控件、布局、activity、service等一系列基础知识,对整个android的开发有了大致的了解。例如: 要的布局(或者控件) ,在学习界面中,我发现android为我们提供了很好的类似反射机制,通过layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建view进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的 跳转intent管理,通过bundle对数据在界面之间进行传输。
4在手机交互式通信服务中,学习了android手机之间进行短信发送、广播、对广播的监听、服务等,在service类中没有context,可以通过handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的currentactivity这个变量进行控制,进行处理。
在android编程过程中巩固熟悉了java的编程。由于android应用程序的开发离不开java的支持,所以基础的java知识是必须的。android系统是基于linux的手机操作系统平台,要深入系统的学习android,不仅仅是有java和android应用开发,必须要具备linux,c/c++高级编程才能深入的涉及android framework和android内核开发。成为android开发的高素质人才。所以,在后续对android的学习中可能会看一些较底层的书籍。
由于这次实习时间较短,对于android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的activity忘记注册,对sd卡存取需要权限,在写sql语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。
通过android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了android应用程序的开发,以及加深了对java的认识。
最后,通过实习,我收获了很多东西,特别是编程方面的,这对即将毕业的我们来说,这次实习是一次较为珍贵的充电,篇四:android实训心得 android实训心得
刚开始接触android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的android sdk开发范例大全中的例子以及android提供的apidemos进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。
我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。
通过半个月的android实习,基本掌握了android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习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,cc++高级编程才能深入的涉及android framework和android内核开发。成为android开发的高素质人才。所以,在后续对android的学习中可能会看一些较底层的书籍。
由于这次实习时间较短,对于android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的activity忘记注册,对sd卡存取需要权限,在写sql语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。
通过android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了android应用程序的开发,以及加深了对java的认识。
最后,通过实习,我收获了很多东西,特别是编程方面的,这对即将毕业的我们来说,这次实习是一次较为珍贵的充电,
本文由成都android培训 华育国际提供 android实训总结
——xxxx 三周的android 实训,已接近尾声。在这短暂的三周之内,有成功、有失败;
有喜悦、有辛酸。在实训老师的带领下,我学会了很多。我们小组在实训老师的协助下最终成功的完成实训项目。
实训前二周,由于我在java基础方面的知识比较薄弱,学习重点放在了java基础学习上,兼顾android学习。
java基础学习:
内容:
(1)1.bean-实体类分析。
2.功能分析。
3.语义模型、关系模型、界面模型、流程图。
4.代码分析、dao接口实现。
(2)完成老师每日给的java 基础作业,达到复习的目的。每日老师给的练习都有针对性,认真的完成练习,很好的达到了复习java基础的目的。
成果:
能针对一个简单 java 或android 项目,
(1)分析出对象、实体类,元数据
(2)功能分析 并画出对应的功能界面
(3)数据库分析: 作出语义模型、关系模型、界面模型、流程图
(4)进行代码分析,并实现dao 。
独立完成本次项目的代码框架、dao接口以及dao实现. java基础作业 android学习:
内容:
(1).以新闻客服端为例,讲解了android开发的一个典型流程。
(2).android 如何调试 如何使用log类inf(i)、debug(d)、error---logcat (3).android需要整个应用范围访问某类数据(seion--user) application 的使用 a,静态变量(单例模式) b,复写android application app = getapplication() app.setxxx() appsetxxx() 4.mvc 编辑表单和添加表单公用 (5).android五大布局【linearlayout、framelayout、absoultelayoutrelativelayout和tablelayout】 主要讲解了linearlayout、framelayout, linearlayout---权重layout_weight、layout_grayout (6)intent 页面的跳转,值传递,获取上下文。
(7) 数据库操作【以新闻客服端--category 新闻类 为例】:
1.创建数据库和表,进行数据初始化 2.对表的 增删改查 操作 3.游标curser 的使用。
(6)项目开发:熟悉项目开发流程,能独立完成简单的项目开发。
成果:
练习实现简单的页面布局,
独立完成新闻客服端的开发流程---在原有的基础上扩展业务。
最后一周,项目开发
我们小组抽取的项目是----------个人健康卫士
个人独立完成的模块:
1、代码框架
2、实体类分析、父类方法重写、构造方法。
3、dao 接口实现,提供数据。
单元测试,对所有dao 接口,方法进行测试并编译通过。
4、登录、注册实现。
异常处理:
a、登录提交时,用户名、密码不能为空,否则不与提交。
数据库返回登录信息,处理登录成功与否的异常。
b、注册提交时,检查注册用户名,密码不能为空,密码与确认密码要相同,否则不与提交注册。
项目完成总结心得体会。
1.个人:
在项目刚启动时,我只在java 方面比较擅长,做的模块都是涉及java基础方面的知识。对ui 方面缺乏信心,但随着项目的推进,对ui 方面见的多了解的多了,也能独立完成ui方面的模块。在这次项目中独立完成登录,注册模块。
对于每一个项目开发,都需端正态度,量力而行,发挥自己的长处,这样不仅有利于促进团队项目开发的进度,还有利于把自己代入这个项目。当自己融入这个项目时,就能多思考。并在不影响项目开发进度的前提下,思考这里为什么要这样做,这样做有什么用处。这样是一个自我学习的过程,这里本来不会做,但是经过这个项目或这个模块后,这里也会做了,把不会的变成会的,把别人的知识变成自己的。
2.团队合作:
项目启动时,因为这个项目主要是ui 项目,而我在这方面
基础知识比较差,主要负责了涉及java方面的模块oda实现。
在项目分析时,提的建议较多与项目组长之间发生摩擦。在项目老师的协助下,确定项目分析,确定分工模块,最终较为成功的完成了我们组的项目。
当一个团队合作时,并不是遇到的每个团队,团队成员都令你满意、每个团队都可以融洽相处。这个团队之所以形成,主要目的为了成功完成这个项目。进入团队先要明白进入团队的目的,这个团队成立的目的。明白了这两点,许多在团队中遇到的问题都可以避开或很好的解决。所有成员都围绕如何能更好更完善的完成项目为主。当然在遇到必然可能影响到项目开发进度的问题时,还需及时解决。
3、项目开发
在这次项目中,本着利用自己擅长的部分,加工加点的完成了dao接口实现模块并实现所有的单元测试。为项目ui 后续进度提供了较为完善的后台数据、接口服务。
每个项目开发的过程,都需实事求是、踏实做事。不为面子,虚报自己的能力,能做什么能做多少、都要根据自己的职业能力来下定论。
遇到技术问题,自己能独立解决就独立解决,不能就及时向他人求教或自己查找资料自学。
在项目开发中若有自己比较好的意见(先自己确定以目前技术是实时可行的、对项目开发或功能实现有利的意见),要向项目管理和 项目其他队员提出,看是否采纳。
Android 嵌入式开发心得体会
刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的Android SDK开发范例大全中的例子以及Android提供的APIDEMOS进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想,因为Android在现在也是全新的技术和框架,在其中我也学到了如何用单例模式、工厂模式等常用的设计模式进行学习,通过API进行开发客户端,对Request发送,Response处理中通过比较方便的JSON对象传输,以及对XML、JSON、图片、业务等下载处理,对API接口调用等问题处理,学习Android心得体会。首先在界面上,我们同样可以通过不同布局进行设计非常酷的界面,这些界面可以通过include进行引入,和jsp、html也有相通的地方,同样在android上可以用到自定义的样式这和c也有比较相通的地方,我们可以通过一些公用的方法写个BaseActivity这个基类,通过继承方式比较不错的实现了Activity的界面,因为这样你可以Header(头部)和Footer(尾部)进行处理一些触发事件或者特效等,布局模式以相对模式为主,线线布局模式可以在比较简单的include进行完成,最重要的一点就是:我们可以自己通过重写方法或者通过实现View或者Layout等类进行扩充项目需要的布局(或者控件),在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳转Intent管理,通过Bundle对数据在界面之间进行传输。其次在手机交互式通信服务中,学习了Android手机之间进行短信发送、广播、对广播的监听、服务等,在Service类中没有context,可以通过Handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的CurrentActivity这个变量进行控制,进行处理。
总而言之,Android设计还是比较自由开阔的,只要有想法,自己动手便能实现。
即 使你的应用程序是快速且响应灵敏的,但一些设计仍然会给用户造成问题——与其它应用程序或对话框未事先计划的交互,意外的数据丢失,意料之外的阻塞等等。
避免这些问题,有助于理解应用程序运行的上下文和系统的交互过程,而这些又正影响着你的应用程序。简而言之,你应该竭尽全力去开发一个与系统和其它应用程 序流畅交互的应用程序。
一 个常见的流畅问题是,一个应用程序的后台处理——例如,一个 Service或者
BroadcastReceiver——弹出一个对话框来响应一些事件。这可能看起来没啥大碍,尤其是你在模拟器上单独地构建和测试你 的应用程序的时候。然而,当你的应用程序运行在真机上时,有可能你的应用程序在没有获得用户焦点时后台处理显示了一个对话框。因此,可能会出现在活跃的应 用程序后方显示了你的应用程序的对话框,或者从当前应用程序夺取焦点显示了一个对话框,而不管当前用户正在做什么(例如,正在打电话)。那种行为,对应用 程序或用户来说,就不应该出现。
为了避免这些问题,你的应用程序应该使用合适的系统资源来通知用户——Notification类。使用Notification,你的应用程序可以在状态栏显示一个 icon来通知用户已经发生的事情,而不是夺取焦点和打断用户。
另 一个流畅问题的例子是未能正确实现Activity的 onPause()和其它生命周期方法而造成意外丢失了状态或用户数据。又或者,如果你的应用程序想暴露数据给其它应用程序使用,你应该通过 ContentProvider来暴露,而不是(举例)通过一个可读的原始文件或数据库来实现。
这 些例子的共同点是它们都应该与系统和其它应用程序协作好。Android系统设计时,就把应用程序看作是一堆松散耦合的组件,而不是一堆黑盒代码。作为开 发者来说,允许我们把整个系统看作是更大的组件集合。这有益于我们可以与其它应用程序进行清晰无缝的集成,因此,作为回报,我们应该更好的设计我们的代 码。
下面将讨论常见的流畅问题以及如何避免它们:
一 定要记住Android是一个移动平台。可以显而易见地说,其它Activity(例如,“Incoming Phone Call”应用程序)可能会在任何时候弹出来遮盖你的Activity,记住这个事实很重要。因为这个过程将触发 onSaveInstanceState()和 onPause()方法,并可能导致你的应用程序
被杀死。
如 果用户在你的应用程序中正在编辑数据时,其它 Activity出现了,这时,你的应用程序被杀死时可能丢失那些数据。当然了,除非你事先保存了正在进行的工作。“Android方式”是这样做的:能 接收和编辑用户输入的 Android应用程序应该重写 onSaveInstanceState()方法,并以恰当的方式保存它们的状态。当用户重新访问应用程序时,她能得到她的数据。进行这种处理方式最经典的例子是 mail应用程序。如果用户正在输入 email,这时其它 Activity启动了,mail应用程序应该把正在编辑的email以草稿的方式保存起来。
如果你不想穿着内衣在大街上溜达的话,你的数据也不应该这样。尽管可能存在暴露应用程序的某种形式给其它应用程序,但这通常不是最好的主意。暴露原始数据,要求其它应用程序能够理解你的数据的格式;
如果你变更了格式,那么,你将破坏那些没有进行同步更新的应用程序。
“Android 方式”是创建一个 ContentProvider,以一种清晰的、深思熟虑的和可维护的API方式暴露你的数据给其它应用程序。使用 ContentProvider,就好像是插入Java接口来分离和组装两片高耦合的代码。这意味着你可以修改数据的内部格式,而不用修改由 ContentProvider暴露的接口,这样,也不会影响其它应用程序。
如果用户正在运行一个应用程序(例如,Phone程序),断定对用户操作的目的才是安全的。这也就是为什么必须避免创建Activity,而是直接在当前的 Activity中响应用户的输入。那 就是说,不要在 BroadcastReceiver或在后台运行的 Service中调用 callActivity()。这么做会中断当前运行的应用程序,并导致用户恼怒。也许更糟糕的是,你的 Activity可能成为“按键强盗”,窃取了用户要提供给前一个 Activity的输入。视乎你的应用程序所做的事情,这可能是个坏消息。
不 选择在后台直接创建 Activity UI,取而代之的是,应该使用NotificationManager来设置 Notification。它们会出现在状态栏,并且用户可以在他空闲的时候点击它们,来查看你
的应用程序向他显示了什么。(注意,如果你的 Activity已经在前台了,以上将不适用:这时,对于用户的输入,用户期望的是看到下一个 Activity来响应)
如果你的应用程序需要执行一些昂贵或耗时的计算的话,你应该尽可能地将它挪到线程里。这将阻止向用户显示可怕的“Application Not Responding”对话框,如果不这样做,最终的结果会导致你的应用程序完全终止。
一 般情况下,Activity中的所有代码,包括它的 View,都运行在相同的线程里。在这个线程里,还需要处理UI事件。例如,当用户按下一个按键,一个 key-down事件就会添加到 Activity的主线程队列里。事件处理系统需要很快让这个事件出列并得到处理;
如果没有,系统数秒后会认为应用程序已经挂起并为用户提供杀死应用程序 的机会。
如果有耗时的代码,内联在Activity上运行也就是运行在事件处理线程里,这在很大程度上阻塞了事件处理。这会延迟输入处理,并导致ANR对话框。为了避免这个,把你的计算移到线程里。
任 何值得使用的应用程序都可能有几个不同的屏幕。当设计UI屏幕时,请一定要使用多个Activity对象实例。
依赖于你的开发背景,你可能理解 Activity类似于 Java Applet,它是你应用程序的入口点。然而,那并不精确:Applet子类是一个 Java Applet的单一入口点,而一个Activity应该看作是你的应用程序多个潜在入口点之一。你的“main”Activity和其它之间的唯一不同点 是“main”Activity正巧是在AndroidManifest.xml文件中唯一对“android.intent.action.MAIN”动作感兴趣的Activity。
因此,当设计你的应用程序的时候,把你的应用程序看作是Activity对象的 集合。从长远来看,这会使得你的代码更加方便维护。
当 谈到 UI观感时,巧妙地交融非常重要。用户在使用与自己期望相反的 UI的应用程序时,会产生不愉快的感觉。当设计你的 UI时,你应该尽量避免太多自己的主题。相反的,使用同一个主题。你可以重写或扩展你需要的主题部分,但至少在与其它应用程序相同的 UI基础上开始。
不 同的 Android设备可能支持不同的屏幕分辨率。甚至一些可以自己变更分辨率,例如,切换到风景模式。确保你的布局和图片能足够灵活地在不同的设备屏幕上正 常显示。幸运的是,这很容易做到。简而言之,你需要做的是为主要分辨率提供不同版本的作品,然后为不同的尺寸设计你的布局。(例如,避免使用硬编码位置而 使用相对布局。)如果那样做的话,系统会处理剩下的部分,而且你的应用程序在任何设备上都看起来很棒。
Android设备会有多种网络连接选项。所有的都提供数据访问,但之间肯定有更快的。其中,速度最慢的是GPRS,GSM网络的非 3G数据服务。即使具备 3G能力的设备在非3G的网络上也会花费很多的时间,所以,网络很慢仍然是一个长期存在的事实。
这 就是为什么你应该按照最小化的网络访问和带宽来编写你的代码。你不能假设网络是快速的,所以,你应该总是计划它是慢的。如果你的用户碰巧在一个快速的网络 上,那很好——他们的用户体验会提升。你要避免相反的情形:在不同的地点和不同时间,应用程序有时可用,有时慢得令人抓狂,这样的程序可能不会受欢迎。
还 有一个潜在的地方是,如果你正在使用模拟器,那么你很容易受它迷糊,因为模拟器使用电脑的网络连接。这比手机网络快很多,所以,你需要修改模拟器设定来模 拟较低的网络速度。你可以在 Eclipse中做到这点,在启动选项的模拟器设置页里设置或者在启动模拟器时通过命令行选项设置。
Android 可以支持多种外观形状。也就是说,一些Android设备拥有全“QWERTY”键盘,而其它可能会有40键、12键或其它键盘设置。同样的,一些设备可 能有触摸屏,但一些也会没有。当创建你的应用程序的时候,记住这一点。不要假定特定的键盘布局——除非你真的想限定你的应用程序只运行在某些设备上。
如 果移动设备经常插在墙上,那么,它也就不是很“移动”。移动设备是电池供电的,如果我们能让每次充电的电池使用得更持久一些,那么每个人都会更加开心—— 尤其是用户。
其中两大耗电硬件是处理器和无线;
这也就是我们为什么要写尽可能少做工作、尽可能少去使用网络的应用程序的重要原因。
如 何让你的应用程序最小化的占用处理器,归根结底还是要写高效代码。为了减少无线的电量消耗,确保对错误条件进行正确的处理,并只获取你要的东西。例如,如 果某一个网络操作失败了,不要不断地进行重试。如果失败了一次,有可能是用户不受欢迎,因此,如果你再以正确的方式操作,有可能还会失败;
所有你做的都是 在浪费电池。
用户是相当聪明的:如果你的程序高耗电,他们是一定会发现的。到那个时点,你唯一可以确定的是,你的程序将很快被卸载掉。
Android入门心得
工具使用
1.打开已有工程:
方法1:Eclipse>file>new>Android Project>Next>Create Project existing source>选择你的项目.该方法适合不在工作目录workspace下的文件。
方法2:在屏幕上方的选单列上,选择「File->Import」选项,会跳出「Import」视窗。选择「General->Existing Projects into WorkSpace」项目,然后按下「Next」按钮带到新一个画面。在「Select Root Directory」栏位旁,按下右方的「Browse...」按钮,选择对应的工程。选择好后,按下「Finish」按钮完成从现存在工作环境(WorkSpace)资料夹下的工程汇入到Eclipse 环境的动作。
2.修复工程。如果发现开启后的资料夹图示上有个小小的黄色惊叹号,表示工程导入后还有些问题,我们可以使用ADT 内建的功能来试着修复。
在「Package Explorer」的「ApiDemos」工程档桉夹图示上点选右键,Android Tools->Fix Project Properties
3.新建模拟器
一种方法是在windows的运行>cmd中。
在windows的“运行”->cmd中启动Android emulator。
首先,设置环境变量。在Windows 2000, XP, 2003 这些操作系统里,点选「我的电脑右键> 属性> 高级> 环境变数」。在「系统变数(S)」栏中,选取「PATH」变数名称后,再点选「编辑(I)」按钮。加入你的android-sdk-windows的安装路径(因个人电脑而异):在弹出的视窗中将「; D:\\\\software\\\\eclipse\\\\Andorid开发套件\\\\android-sdk-windows\\\\tools」(注意要以分号隔开)这字串添在原本的字串之后,按下确定后重新启动操作系统。
其次,开始>运行>cmd:输入如下命令
>android list targets 列出模拟器类型
>android create avd --target 1--name android2.2新建模拟器(「--target 1」参数的意思是这个模拟器使用id 为1的模拟器类型,「--name cupcake」参数的意思是将这个建立的模拟器命名为android2.2)
>android list avd 查看已有的模拟器。
另一种简单的方法是在eclipse集成开发平台上。
Eclipse>windows>android SDK and AVD manager>new >„„
4.换屏。在Windows 操作系统上按下「Ctrl」和「F12」可以切换模拟器屏幕,直屏&横屏。
5.换外观。还可以添加android手机的模拟器外观,如G1的。实现方法:先下载G1外观(http:///),解压后放到即可,执行android create avd --target 2 --name devphone –skin G1
6.添加SD Card。
首先创建镜像文件。用cmd中进入到android的SDK的Tools目录下,执行mksdcard创建。
>mksdcard 1024M sdcard.img
(其中第一个参数为要创建的sdcard容量大小(容量大小自己决定),
第二个参数为sdcard的名字)
然后,启动带sdcard的Android模拟器
>emulator -sdcard sdcard.img
我使用的时候,发现用上述命令总是提示错误。按照cmd的提示,
改为emulator –data sdcard.img。不过貌似启动很慢,而且手机内存和sd卡内存(磁盘虚拟)也会调整,开始以为可以了,结果发现死机了。~~~~(>_\n
最后根据提示,命令中加入模拟器名,emulator –avd [你的模拟器的名
字] -sdcard sdcard.img,就启动了模拟器。(估计是我电脑有多个模拟器,所以命令就不知道怎么执行了)
7.在模拟器上安装android 程序。
Windows>navigation>next perspective>DDMS>选中file explorer 可以看到Android手机模拟的系统文件。有个SDcard的文件夹即为SD卡内容。点选一个手机图标即可将android程序下载到“手机”(通过这种方法,还可以添加图片,MP3等。也可从手机上传到PC,用即可)然后像操作手机一样安装程序即可。你可以试试安装“愤怒的小鸟”“植物大战僵尸”等游戏。在PC上体验android。
说明:如果你的手机模拟器上没有装文件浏览器。是看不到文件的。解决的办法是:可以你先在在cmd中安装浏览器,adb install ***.apk。安装文件必须在cmd的当前目录下,不然cmd找不到的。
8.屏幕截图。在Windows>navigation>next perspective>DDMS>Device窗口中有个Screen capture 图标。点选即可将手机模拟器的屏幕内容截取下来。
9.JAVA语法
10.Package:
当一个大型程序交由数个不同的程序人员开发时,用到相同的类名是很有可能的,那么如果发生了这样的事件我们该怎么办那?,在我们java程序开发中为了避免上述事件,提供了一个包的概念(package),那么既然有了这样一种方法能避免上述事件.
11.Native。在JAVA中 native关键字表示一个方法只可以调用,但是不能编写!
12.将C写的动态库变成Java所用:
Native方法,native是一个本地接口。
1、在Java中声明native()方法,然后编译;
2、用javah产生一个.h文件;
3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
4、将第三步的.cpp文件编译成动态链接库文件;
5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。
13.Java关键字final
final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类、非
抽象类成员方法和变量。你可能出于两种理解而需要阻止改变:设计或效率。final类不能被继承,没有子类,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。final不能用于修饰构造方法只是用来标识这个引用不能被修改。
14.R.java
R.java是ATD自行产生的,ID号都是唯一的,如果不熟悉,最好是不要动这个里面的东西,这个类里面通常定义的都是project的一些resource信息,attr、drawable、id、raw、layout、string以及xml等
15.在Java中,通过关键字extends继承一个已有的类。New创建对象。
16.创建对象是可直接用button,EditText, TextView,Handler等关键字,
17.修改程序图标:把res文件夹的drawable文件夹中的icon.Png替换成自己的icon即可。
最后
Android也可以不用JAVA语言,而采用经典的C&C++开发。基于的原理也就是第12点讲到的,将程序的实现代码用C(C++)写好后,封装成库,再使用native方法调用,即JNI,JAVA native interface。(开发环境为DNK Native Development Kit)。
麻烦!还不如新学JAVA,以后肯定用得到的。
Android应用程序开发入门
1.界面
目前的ADT 版本提供了预览界面的功能,但尚未提供方便地视觉化拖拉界面元件的开发工具。以后也许ADT 会加入完整的GUI 拖拉设计工具。所以当前设计都是在res下的layout下的main.xml修改界面描述语言。
2.
Android实习心得
刚开始接触Android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的Android SDK开发范例大全中的例子以及Android提供的APIDEMOS进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。
我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。
1通过半个月的android实习,基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。
2通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。例如: 要的布局(或者控件) ,在学习界面中,我发现Android为我们提供了很好的类似反射机制,通过Layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建View进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的
跳转Intent管理,通过Bundle对数据在界面之间进行传输。
4在手机交互式通信服务中,学习了Android手机之间进行短信发送、广播、对广播的监听、服务等,在Service类中没有context,可以通过Handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的CurrentActivity这个变量进行控制,进行处理。
在Android编程过程中巩固熟悉了Java的编程。由于Android应用程序的开发离不开Java的支持,所以基础的Java知识是必须的。Android系统是基于Linux的手机操作系统平台,要深入系统的学习Android,不仅仅是有Java和Android应用开发,必须要具备Linux,C/C++高级编程才能深入的涉及Android Framework和Android内核开发。成为Android开发的高素质人才。所以,在后续对Android的学习中可能会看一些较底层的书籍。
由于这次实习时间较短,对于Android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的Activity忘记注册,对SD卡存取需要权限,在写SQL语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。
通过Android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了Android应用程序的开发,以及加深了对Java的认识。
最后,通过实习,我收获了很多东西,特别是编程方面的,这对即将毕业的我们来说,这次实习是一次较为珍贵的充电,
Android学习心得
这学期,我们新开了一门课程——android的研发。在老师们的介绍下,我们了解android的开发环境以及控件的功能。刚开始接触Android觉 得 既 陌生 又 亲 切,陌 生 在 于 没 有 学 过 具 体 的 开 发 软 件,亲 切 在于它在界面开发上和web也可以形成了相通的架构,更加方便。
一、Android简介
Android一词的本义指“机器人“,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。目前,最新版本为Android 2.4 Gingerbread和Android 3.0 Honeycomb。Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统。Android 早期由原名为"Android"的公司开发,谷歌在2005年收购"Android.Inc"后,继续对Android系统开发运营,它采用了软件堆层(software stack,又名软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能,其他的应用软件则由各公司自行开发,部分程序以Java编写。2011年初数据显示,仅正式上市两年的操作系统Android已经超越称霸十年的塞班系统,使之跃居全球最受欢迎的智能手机平台。现在,Android系统不但应用于智能手机,也在平板电脑市场急速扩张,在智能MP4方面也有较大发展。采用Android系统主要厂商包括台湾的HTC,(
装工具在线安装。单击“android-sdk-windows.zip”链接进行SDK下载,下载该文件后解压该文件到操作系统的任意目录下。打开目录找到SDK Setup.exe可执行文件,双击执行该文件。选择"Available Packages",选择想安装的版本(我是全选了,省事),然后单击“InstallSelected”->选择“Accept All”,再单击“Install Accepted”就可以在线安装了。提示:如果你的“Available Packages”右侧的地址不能打开,请选择左侧列表的“Setting”选项,在右侧的设置中勾选“Fore https://......” 第二步:安装JDK A、下载JDK。Android SDK需要JDK5 以上的版本。JDK6的下载地址http://java.sun.com/javase/downloads/widget/jdk6.jsp。
B、安装JDK。下载完成后进行正常双击、安装,这里就不说了。。。
C、配置Java环境变量
1、配置Java Home。复制Java的安装路径,右键单击“我的电脑”->“属性”->“高级”—>“环境变量”中新建环境变量java_home,变量值为java安装路径。
2、配置Path。右键单击“我的电脑”->“属性”->“高级”—>“环境变量”,在“系统环境变量”中编辑Path便来了个,添加Java的bin目录到其中。变量与变量中间使用分号“;”分隔。
3、配置clapath。右键单击“我的电脑”->“属性”->“高级”—>“环境变量”,在“系统环境变量”中新建一个系统变量名称为“clapath”,变量值为半角句号“.”第三步:下载Eclipse ADT插件要求Eclipse的版本是3.3以上,Eclipse的下载网址是http://www.dawendou.com/downloads/。下载后解压可以直接使用。
(二)下载安装ADT。
这里介绍通过Eclipse在线更新的方式安装。
1、启动Eclipse,选择“Help”->“Install New Software.....”
2、单击“Add.....”添加一个更新站点(注意:站点http后面不要加s)否则可能连接失败(Name:ADT0.9.5;
Location:http://dl-l.google.com/android/eclipse/)
3、添加好后,勾选“Developer Tools”单击“Next”进行更新安装。
四、应用程序基础
1.Android应用程序框架
android实习心得
刚开始接触android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的android sdk开发范例大全中的例子以及android提供的apidemos进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。
我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。
1通过半个月的android实习,基本掌握了android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。
2通过学习android的控件、布局、activity、service等一系列基础知识,对整个android的开发有了大致的了解。例如: 要的布局(或者控件) ,在学习界面中,我发现android为我们提供了很好的类似反射机制,通过layout文件夹下的配置文件,可以快速的形成界面,在配置文件可以设置属性或者样式都是很快捷方便。对比较特殊的界面也可以通过处理嵌入到指定的界面,同样你可以通过java代码直接创建view进行添加,不过这种方式比较复杂。对一些点击、选中、按键等处理的事件,界面之间的跳转intent管理,通过bundle对数据在界面之间进行传输。
4在手机交互式通信服务中,学习了android手机之间进行短信发送、广播、对广播的监听、服务等,在service类中没有context,可以通过handler来每秒反复运行,自动送出系统广播信息,同时在这里我们也知道可以设计一个常用的变量类,设计一个当前的currentactivity这个变量进行控制,进行处理。
在android编程过程中巩固熟悉了java的编程。由于android应用程序的开发离不开java的支持,所以基础的java知识是必须的。android系统是基于linux的手机操作系统平台,要深入系统的学习android,不仅仅是有java和android应用开发,必须要具备linux,c/c++高级编程才能深入的涉及android framework和android内核开发。成为android开发的高素质人才。所以,在后续对android的学习中可能会看一些较底层的书籍。
通过android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了android应用程序的开发,以及加深了对java的认识。
最后,通过实习,我收获了很多东西,特别是编程方面的,这对即将毕业的我们来说,这次实习是一次较为珍贵的充电,篇二:android实训心得
项目总结
时间过的好快,为期三个月的实训生活即将结束了,每一次的实训我们都受益匪浅,我们学到的不仅仅是课内还有课外,实训让我们的课内知识得到了巩固,专业知识、编程水平都有很大的提高,我们非常感谢这次实训。
刚开始二周的高强度的课程安排让我们受益匪浅;
接下来的项目实训又让我们可以巩固了课程。这让我觉得实习生活充实而有意义。
乐淘购物项目和android优化大师,我更好的学习了ui的设计,如何使界面漂亮,美观,巩固了listview,gridview,的使用,学会了动画进入界面的,和会移动的画廊等等。在这两个项目中,除了让我明白工作中需要能力,素质,知识之外,更重要的是学会了如何去完成一个任务,懂得了享受工作。当遇到问题,冷静,想办法一点一点的排除障碍,到最后获取成功,一种自信心由然而生,这就是工作的乐趣。有时候也需要虚心请教,从别人的身上真得能学习到不自己没有的东西,每一次的挫折只能使我更接近成功。
音乐播放器项目,我们是七个人组成小组完成的,由组长带领我们,分配任务,每个人,都发挥自己的长处,更好地去完成任务。对于团队开发来说,团结一致使我深有体会。团队的合作注重沟通和信任,不能不屑于做小事,永远都要保持亲和诚信,把专业理论运用到具体实践中,不仅加深我对理论的掌握和
运用,还让我拥有了一次又一次难忘的开发经历,这是也是实训最大的收获。
这次实训对于我以后学习、找工作也真是受益菲浅,在这3个月中让我初步从理性回到感性的重新认识,也让我初步的认识这个社会,对于以后做人所应把握的方向也有所启发!相信这些宝贵的经验会成为我今后成功的重要的基石。在此,我非常感谢指导老师和同学对我的帮助。篇三:android实训心得 android实训心得
刚开始接触android感觉到它很有意思,在界面开发上和web也可以形成了相通的架构,更加方便,视觉上也是非常的酷,在前期我通过的大量的android sdk开发范例大全中的例子以及android提供的apidemos进行学习,尽管例子之间的连接比较零散,不过通过这些例子的学习我可以学习到了很多和以前java上相通的思想。
我在为期半个月的实习中学到了很多在课堂上根本就学不到的知识,收益非浅.现在我对这半个月的实习做一个工作小结。
通过半个月的android实习,基本掌握了android应用程序开发的一般流程。对常用控件基本掌握其用法,对其事件的监听方法也基本掌握。学习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,cc++高级编程才能深入的涉及android framework和android内核开发。成为android开发的高素质人才。所以,在后续对android的学习中可能会看一些较底层的书籍。
由于这次实习时间较短,对于android应用程序的高级编程讲的很少,是这次实习中的不足。要想开发一些好的应用程序,还需要更多的知识支持。在做实习最后的项目时,遇到了很多平时没有遇到或者没有特别关注的问题,如常见的activity忘记注册,对sd卡存取需要权限,在写sql语句时细微的错误就可能导致程序运行错误。这些问题只有自己在实际开发中才能体会到并且解决,并且在解决后可以长时间的记住。
通过android的实习,我们在大四毕业前,我们又掌握了一项新的前沿的开发技能,也有了更多的发展方向,这在以后的找工作的过程中无疑为我们增加了砝码,也可以成为我们的一项兴趣爱好,可以根据我们自己的需要设计一些小的程序。总之,在这次实习中,我获得了很多东西,提高了自己的编程技巧和编程方法,并且认识了android应用程序的开发,以及加深了对java的认识。
项目总结
时间过的好快,为期三个月的实训生活即将结束了,每一次的实训我们都受益匪浅,我们学到的不仅仅是课内还有课外,实训让我们的课内知识得到了巩固,专业知识、编程水平都有很大的提高,我们非常感谢这次实训。
刚开始二周的高强度的课程安排让我们受益匪浅;
接下来的项目实训又让我们可以巩固了课程。这让我觉得实习生活充实而有意义。
乐淘购物项目和android优化大师,我更好的学习了UI的设计,如何使界面漂亮,美观,巩固了listview,gridview,的使用,学会了动画进入界面的,和会移动的画廊等等。在这两个项目中,除了让我明白工作中需要能力,素质,知识之外,更重要的是学会了如何去完成一个任务,懂得了享受工作。当遇到问题,冷静,想办法一点一点的排除障碍,到最后获取成功,一种自信心由然而生,这就是工作的乐趣。有时候也需要虚心请教,从别人的身上真得能学习到不自己没有的东西,每一次的挫折只能使我更接近成功。
音乐播放器项目,我们是七个人组成小组完成的,由组长带领我们,分配任务,每个人,都发挥自己的长处,更好地去完成任务。对于团队开发来说,团结一致使我深有体会。团队的合作注重沟通和信任,不能不屑于做小事,永远都要保持亲和诚信,把专业理论运用到具体实践中,不仅加深我对理论的掌握和运用,还让我拥有了一次又一次难忘的开发经历,这是也是实训最大的收获。
这次实训对于我以后学习、找工作也真是受益菲浅,在这3个月中让我初步从理性回到感性的重新认识,也让我初步的认识这个社会,对于以后做人所应把握的方向也有所启发!相信这些宝贵的经验会成为我今后成功的重要的基石。
在此,我非常感谢指导老师和同学对我的帮助。
学习心得:学习Android开发技巧
曾经有在千锋3G学院学习Android开发的我,现将自己的学习心得分享如下,希望能够给更多有这方面学习的网友提供相关信息。
回想起这几个月的学习,使自己对Android开发系统有了更加系统、更加全面的认识,并且使自己的技术水平有了进一步的提高,能在社会上成为更加有竞争力的人。
在千锋的四个月的学习让我懂得了很多,开始的Java基础讲的很细,讲解的不是很快,这样可以让有基础的更好的复习,也可以让没有基础的更容易接受;之后是Android基础,这个阶段主要是让自己了解Android的各种控件的使用,为以后的项目开发打下基础;第三个阶段是项目开发,这一个阶段是最锻炼人的,可以把学到的东西都联系起来,然后进行更好的应用。最后就是就业阶段,就业部的老师都很认真负责,在我毕业前就让我开始为后面的找工作做准备,简历制作好好后又经过老师的改正,让我的简历更有机会被公司选中,还给我讲了一些面试中遇到的问题该怎么去回答。
经过这四个阶段,我学习到的不仅仅是专业的知识,也让我简单的了解到上班的状态,并深刻的体会到细节决定成功的真谛。
学习可以使我们的人生变得更加美满充实。路是自己走出来的,能否走出属于自己的一片天空,全在于自身的努力与坚持,我相信成功总是会留给那些有准备的人。做出你的选择,尝试走出第一步,成功将不会遥远。
同时还要感谢千锋的老师们,他们在我最迷惘的时候给我一些正确的向导!
Android创新团队2012年工作总结
光阴如梭,眨眼之间学期又近结束。从成立之初到现在,Android创新团队也已经走过了半年的时光。回首这个学期的团队工作,感到忙碌而又充实。在团队全体成员努力下,我们较好地完成了本学期的各项工作,取得了一定的成绩,得到了很多宝贵的经验,当然也有不足之处,现总结如下:
一、团队的体系结构逐渐完善
Android创新团队经过不断的探索和尝试,形成了相对独立的体系结构,成立之初,我们团队所有成员就对团队的组织结构、章程、团队规划及本学期工作计划进行了认真的讨论和研究。通过一学期的实践,这些体系正在不断完善。我们的最终目标是让团队工作有一种企业工作的环境和氛围,以便使队员们尽早适应社会上公司的需要,多获得一些实际的经验和技术,虽然目前这个目标还比较难实现,但以后团队的工作都会朝着这个方向去努力的。(接触、沟通交流、合作)
二、团队存在的基础
一方面,学校创新中心为各个团队分配了工作室,并提供了相关设备和资金支持,为团队的正常运行提供了必要的物质条件;
另一方面,开展培训工作、做创新项目以及参加比赛是一个团队得以存活和发展的基础和动力,是一个团队的价值体现。Android创新团队将以此为基础,充分调动队员的积极性,努力使每个队员都能得到学习和提高的机会,从而使团队在整体水平上更上一层楼。
三、队内成员间的沟通
本学期初,我们团队进行了招新工作,此次招新共招大一大二人员23人,人数是团队成立之初的人数的一倍多。考虑到大一同学刚刚步入大学,没有编程基础,所以在要求上与大二同学不同,对大一同学主要是先给他们提供一个良好的学习氛围,通过参加团队的有关活动让他们对软件开发有一定的了解,帮助他们明确自己的目标。另一方面,团队组织了大一同学参加培训,而培训内容主要是比较基础的Html网页制作,适合大一同学学习,也希望通过培训锻炼和提高队员的自学能力。作为团队未来的储备力量,大一的同学表现都很积极主动,这一点是值得表扬的。但队员之间的沟通和交流,尤其是大
一同学之间,存在很大不足,这一点是我们制定以后的工作计划时需要特别注意的地方。
四、希望队员们理解团队和个人的关系
创新,大胆而不荒唐,团队,锻造自己的平台。
Android创新团队成立之初,因为我们大三的几个负责人在实际开发中发现团队合作的重要性,并且学到了比课堂上更加宝贵的实际经验,真心感觉到团队合作带给我们的好处,所以,基于这样一种想法,我们想让更多的同学受益,并继续传承下去,最终成立了Android创新团队。其实有心的人会发现,团队不是意味着放弃个人的利益,而是一个锻造自我的平台。我们是创新团队,要想办法利用好这个平台,锻炼自己。作为一名队员,每个人都要有自己的目标,充分利用团队这个平台,将它实现。请大家明确,团队的成功一定是它的每个队员的成功,之所以会成为一个团队,是因为我们有共同目标和追求。我们都应该为了自己的目标而努力奋斗!
总的来说,我们团队在这一学期进步较大,无论是从团队建设还是对外参加比赛上都取得了不错的成绩。但也要意识到自己的不足和缺陷,积极探索,寻找解决之道,这样才能使团队发展的更好!我们应目光长远继续努力,为自己的美好将来打好基础,为团队的发展贡献力量。最后,我以我们团队的口号与大家共勉:思路决定出路,创新引导发展,Android有我更精彩!
写在前面:
这篇是我暑假以及开学之后的一段时间里,在开发BSLC(同城物物交换系统)的工作总结。因为我也是个android的初学者,所以遇到的很多问题估计也是android初学者可能会遇到的问题。当然,如果你是个android高手,那么此文估计对你的帮助不大。
另外,有很多朋友和老师问我,你做的这个东西亮点在哪里呢?凭什么得奖呢?
我想说,谁不想做出有新意的东东呢?可是对于从零开始的我们,仅仅靠着模仿前人的东西,就已经是要了老命了。哈哈。好吧,说这话确实有点不上进。
给准备或者刚开始学习android的朋友的一点小建议:有可能的话,跟这有实际开发经验(这个经验不只是指android开发的能力经验,还有正规开发软件的规范和过程的经验)的前辈,会让你更快更好更轻松的前进!!!(当然这里的轻松也是相对而言的轻松,学习之事,即使有兴趣做动力,也多半是痛苦之事,所以,强大的心理是必要的,要学会苦中作乐,认真负责,团队合作,不耻下问„„) 好了,话不多说,下面是我整理出来的技术总结:有对内容的疑问或者质疑,欢迎大家与我交流。企鹅号:947840486
Android与webservice开发技术总结(eclipse & visual studio 2008)
虽然开始得有点晚,但总也好过一直不开始。
从今天起,开始整理自己在android——webservice开发过程中遇到的各种问题,以及解决的过程。真心觉得有必要做个每日总结,为了纪念也好,为了以后用到的时候方便查看也好(估计希望不大),总之,专业的程序员都会写技术总结。
这几天一直在整图片上传下载的问题。
从最初的不知所措,到现在的略有了解,个人理解的原理是,通过把图片转换成base64编码,存放在字节流中,通过对字节流的读取、存放,来实现最终对图片的操作。难点是,如何在android下和C#的webservice中分别实现,以及数据的交互。
最初找了很多资料来看,开始选择的是ksoap2 + base64
遇到的细节问题:
图片路径:/sdcard/###.png android app 只能读取模拟器上的文件(图片),而且不能在系统文件里读取图片(root权限问题),所以,最后还是把测试的图片放到了/sdcard下。
最初想先用.net 发布web服务的调试功能,手动传图片。可是后来在学长的提醒下,明白其实不是直接传路径,(而且转换后的字节流),所以,基本上没法手动调试。
Ksoap2 不支持传递byte[]类型的参数,后来试着传base64编码后的string类型,在web服务端再解码,但是不知道哪里出错,还是产生异常。
唉,难道要换别的方法????
已解决,问题还是出在了服务端。是文件最后的存储路径不对,不能写绝对路径(估计是我的格式不对),改成(~/XXX/)相对路径就OK了!
只是这是一个简单的demo,只能上传单个的固定的文件。不过,可以比较容易改进,难点是最终我们的项目要求是一次返回多组图片数据,有待完善。
8月17日
图片上传整合到BSLC中:
进展比较缓慢。
第一个对调用系统相册的解决过程。查了很多资料,最后还是找到一个比较详细的,通过Intent.createChooser,可以选择调用多个Activity。难点是,需要在这多个被调用的Activity在AndroidManifest注册的时候加上intent -filter ,貌似这里是用来区分那些是属于Intent.ACTION_GET_CONTENT 类型里的。这样的话,也就不再是调用系统默认的INTENT了吧。。。
android:name="com.photos.doTakePhoto"
android:label="照相">
Intent.createChooser的相关代码:
public cla ImageButtonClicklistener implements OnClickListener
{
} public void onClick(View v) {
} Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT);
int resultCode;//区分照相还是从本地获取图片
Intent selectIntent = new Intent(Intent.createChooser(getAlbum,"选Add01.this.startActivity(selectIntent);
择图片"));
今天的第二个坑爹的问题是:不知道什么原因,在往sdcard里添加图片的时候报错权限问题:read-only system(后缀的permiion变成了d------),实际应该是d---rwxr 。各种google各种研究各种方法试都没有效果,重启了两次,删了又建了好几次模拟器。(还试过edit过 sdcard路径为file 镜像文件sdcard.img)
最后一怒之下,把系统在User/p(我的主机名)目录下的.Android文件夹全部删除。
然后关机,去吃饭了。
等再回来,新建了一个AVD(模拟器),惊喜地发现,sdcard权限问题解决了。。。。
最后再列出一个之前遇到过的各种问题,可能有些记不清了,等有机会再补充解决过程吧。
@ksoap2的Action不能被webservice(vs2008 .net C#)识别。这个有过痛苦的回忆,所以做过记录。
//在Java平台上调用.NET Web Service的服务时,出现"服务器未能识别 HTTP 标头 SOAPAction 的值"
//SOAPAction HTTP request header被用来标识SOAP HTTP请求的目的地,其值是个URI地址
//SOAP发送并不限制格式、URI特征或其必须可解析,那么在这种情况下,发送一个HTTP SOAP请求时,其HTTP客户端必须使用/指明SOAPAction HTTP request header //SOAPAction header的内容可以被用在服务端,诸如:防火墙适当的过滤基于HTTP的SOAP请求消息等场景。
//SOAPAction header的值为空串("")表示SOAP消息的目的地由HTTP请求的URI标识;
无值则表示没有指定这条消息的目的地
[SoapDocumentService(RoutingStyle = SoapServiceRoutingStyle.RequestElement)] @类似的还有:SoapObject类型不能正确接受webservice返回的值,改用Object类型,再转化回SoapObject。(或者直接用object类型)异常解决。
result = (Object) envelope.getResponse();
@webservice返回值为Dataset时,对数据的解析,也是一个痛苦的过程:最后还是找到了一个比较有自主研究精神以及分享精神的博主,才完满解决(这里有嵌套之意):
edt2.setText( ((SoapObject) ((SoapObject)result).getProperty(0) ).getProperty("name") .toString() ); ps:man.setChecked(true);是使radiobutton(单选按钮)获取焦点的方法,也花费了很多时间,最后还是高帅学长一句话,世界安静了。。。。。
@还有一些小问题,比如数据库的外键依赖啊,sql语句的组装啊,等等,看似小问题却也花费了不少时间精力。
最后总结一句吧:只要会耐心调试,总能找到问题的所在,然后研究解决问题。(怕就怕在不知道异常在哪,那才是真正的坑爹了~~~~~)
2012年8月18号
今天受困于一个上传图片遗留下来的坑爹问题,本来是想半天或者一会功夫就能解决的,结果却浪费了大量的精力和好心情。不牢骚了。
昨天做好了从本地的相册里读取图片,以期实现上传,还差的最后一步就是把读取图片的路径找到,发给文件流、字符流等等。就是这坑爹的路径问题:在Android里,文件的路径有两种,一种是绝对路径:/sdcard/XX.png之类。一种是相对路径,也就是Android系统数据库中的路径:例如图片的uri(content://media/external/images/media/4)。
这里我要做的就是要把uri转换为sdcard里的绝对路径!!!! 即使明白了原理和目标,也比较顺利地找到了部分相关的源代码,事实证明,源代码给的还是不全,让我们这些初学者苦不堪言啊。
捣鼓了半天,研究了半天,还是一个劲地报错:java.lang.NullPointerException at android.content.ContextWrapper.getContentResolver(ContextWrapper.java:90) 也知道出错的位置::Cursor actualimagecursor = this.ctx.managedQuery(uri,proj,null,null,null); 我写的是this.managedQuery(uri,proj,null,null,null);
开始就不是很明白怎么个转换具体过程的我,在学长也没研究过的阴影下,坚持各种搜索资料,慢慢得开始有了一点感性的认识,知道问题可能出在context上(因为涉及了不少Activity)。(上下文)最后还是用了seion(自己写的一个用于静态存储数据的类),
package com.flogin; import android.content.Context; import android.net.Uri; public cla Seion {
public static String id;//记录登录用户名
public static String paword;//记录登录密码
public static Uri imageUri; //记录最近一次上传的图片的Uri(格式:content://media/external/images/media/6) }
public static Context doSelectImageContext; 相关代码:
public cla ImageButtonClicklistener implements OnClickListener
{//上传图片按钮的监听器,在add.java里
public void onClick(View v) {
imageButton.setVisibility(View.INVISIBLE);//隐藏button按钮 Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); Intent selectIntent = new Intent(Intent.createChooser(getAlbum,"选择图片"));
public boolean upload(Uri uri,String fileName){ //上传图片的函数 service.java
String[] proj = { MediaStore.Images.Media.DATA }; String try { Log.i("log.i", "start----------------Uri:"+uri); Log.i("log.i", "fileName:" + fileName);
} } Add01.this.startActivity(selectIntent);
img_path=getFilePathFromUri(Seion.doSelectImageContext,uri,proj,null,null,null);//碉堡了,我成功了
{ e.printStackTrace(); return false; File file = new File(img_path);
Log.i("log.i", "file(string path):" + img_path);
FileInputStream fis = new FileInputStream(file);// 打开的图片地址 ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[8192]; int count = 0; while ((count = fis.read(buffer)) >= 0) { } String uploadBuffer = new
Log.i("uploadbuffer", "uploadbuffer:" + uploadBuffer); // byte[] image =baos.toByteArray();
boolean flag = connectWebService(uploadBuffer, fileName); if (flag) { { } return false; return true; } else baos.write(buffer, 0, count); String(Base64.encode(baos.toByteArray())); } catch (Exception e) }
} public static String getFilePathFromUri(Context context, Uri uri, String[] {
} Cursor cursor = context.getContentResolver().query(uri, projection, int index = cursor.moveToFirst(); String path = cursor.getString(index); cursor.close(); cursor = null; return path; projection, String selection, String[] selectionArgs, String sortOrder) selection, selectionArgs, sortOrder); cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); private boolean connectWebService(String image,String fileName) throws IOException, XmlPullParserException {
envelope.bodyOut = rpc; System.out.println("post: " + rpc); envelope.dotNet = true; envelope.setOutputSoapObject(rpc); SoapSerializationEnvelope envelope = new
SoapSerializationEnvelope(SoapEnvelope.VER11); HttpTransportSE ht = new HttpTransportSE(Url); ht.debug = false;
rpc.addProperty("id", Seion.id); rpc.addProperty("image", image); rpc.addProperty("fileName", fileName); Log.i("send: ", image + " " + fileName); SoapObject rpc = new SoapObject(namespace, methodname);
String Url = "http://211.87.147.81:8082/Service.asmx"; String namespace = "http://tempuri.org/"; String methodname = "UploadImage"; String SOAP_ACTION = "http://211.87.147.81:8082/Service.asmx?op=UploadImage";
}
ht.call(SOAP_ACTION, envelope); Object result = (Object) envelope.getResponse(); System.out.println("result: " + result); if (result.toString().equals("true")) { { } return false; return true; } else
//这是出现从本地选择图片的Activity package com.photos; import java.io.FileNotFoundException; import com.setting01.Add01; import com.flogin.Seion; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View;
public cla doSelectImageFromLoacal extends Activity {
/*用来标识请求照相功能的activity*/ private static final int CAMERA_WITH_DATA = 1001; /*用来标识请求gallery的activity*/ private static final int PHOTO_PICKED_WITH_DATA = 1002; private Bitmap bitMap; //用来保存图片 private boolean hasImage; //是否已经选择了图片 public static Uri selectedImageUri=null; public void onCreate(Bundle savedInstanceState) {
} startActivityForResult(localIntent, PHOTO_PICKED_WITH_DATA); super.onCreate(savedInstanceState); Intent localIntent = new Intent(); localIntent.setType("image/*"); localIntent.setAction("android.intent.action.GET_CONTENT"); protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.i("doSelectImageFromLoacal:","doSelectImageFromLoacal:start!!!!!!!!!!!!!!!!!!!!!!!!!!");
if (bitMap != null && !bitMap.isRecycled()) { bitMap.recycle(); } selectedImageUri = data.getData(); Seion.doSelectImageContext=this; Seion.imageUri=selectedImageUri;//把对应图片的在数据库中的Uri读取给 Log.i("log.i","selectedImageUri: "+selectedImageUri.toString()); if(selectedImageUri != null){ try { bitMap
= if (resultCode != RESULT_OK) return; switch (requestCode) { case PHOTO_PICKED_WITH_DATA: //从本地选择图片
Seion BitmapFactory.decodeStream(getContentResolver().openInputStream(selectedImageUri));
case CAMERA_WITH_DATA: //拍照
Bundle bundle = data.getExtras(); bitMap = (Bitmap)bundle.get("data"); if (bitMap != null) bitMap.recycle(); } catch (FileNotFoundException e) { e.printStackTrace(); } //下面这两句是对图片按照一定的比例缩放,这样就可以完美地显示出来。有关图片的 //int scale = ImageThumbnail.reckonThumbnail(bitMap.getWidth(), //bitMap = ImageThumbnail.PicZoom(bitMap, (int) (bitMap.getWidth() Add01.imageView.setImageBitmap(bitMap); Add01.imageView.setVisibility(View.VISIBLE); doSelectImageFromLoacal.this.finish();//结束当前Activity hasImage = true; } break; 处理将重新写文章来介绍。
bitMap.getHeight(), 500, 600); / scale), (int) (bitMap.getHeight() / scale));
} bitMap = (Bitmap) data.getExtras().get("data"); Add01.imageView.setImageBitmap(bitMap); Add01.imageView.setVisibility(View.VISIBLE); hasImage = true; break; } } 如何动态显示listview中绑定的数据? 尝试失败
现在尝试静态显示,事先把listview显示出来
成功了!!!虽然还是有些小bug需要改进,不过都不是大问题。
原来问题是xml文件没写好,要使用线性布局,使用关联布局会只在
listview里显示一个item。
BSLC依然存在的问题:收信箱里的收到的信件 重复读取的问题,需要有个已读和未读的区别属性。
java.net.SocketException: Connection reset by peer 没有解决,在模拟器上测试时不再出现此问题,但是还是需要用到
异步加载图片,不然几乎没有适合的用户体验
下一步工作:
之前的code都没有调试(本身有点发烧,状态不好,先到这里把) 由物品的详细信息界面 跳转到交换引导界面 还需要扩增webservice:
比如 删除我的宝贝和交换篮里的物品信息 技术方面,还没想好怎么动态刷新搜索物品界面;
还有异步加载(试着写了,但是没调试。) 感觉要完善还有很长的路要走。
唉,今天基本上都干这个了。
已阅和未阅的标记 刷新搜索物品
我离个差 好混乱啊 逻辑上的混乱 调试 bug一大堆 唉唉
下一步工作:
信件的阅读标记;
搜索物品功能的局部刷新的实现 bug:交换 -》选择我的宝贝(改变时报错
java.lang.NullPointerException)这里有待改进;
;
;
;
加入交换蓝,功能没实现;
;
;
;
(webservice返回false) 从错误中恢复时(没有重新运行apk),seion里的id会置空,(
如果能加一个判断,读取之前保存的用户和密码就好了)
下一步工作:
设置信件阅读标志 继续完善,修复bug。
如果服务器返回值的类型是byte[] 的时候,使用Object object =
envelope.getResponse();和SoapObject result =
(SoapObject)
envelope.bodyIn;都不会发生错误现象,但是在使用Object
object = envelope.getResponse();取回来的值在使用base64进
行解码和编码的时候会报出错误。
如果使用SoapObject result = (SoapObject)envelope.bodyIn;
就可以完整的将byte[]进行解码和编码
Android系统默认给TextView插入图片提供了三种方式:
1、ImageSpan
2、Html.ImageGetter
3、TextView.setcompoundDrawables(left, top, right,
bottom)
1、TextView使用ImageSpan显示图片 ImageSpan span = new ImageSpan(this,
R.drawable.ic_launcher); SpannableString spanStr = new SpannableString
("http://orgcent.com"); spanStr.setSpan(span, spanStr.length()-1, spanStr.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.setText(spanStr);
3、在TextView四周显示图片
mTVText.setText("setcompoundDrawables"); Drawable d = getResources().getDrawable
(R.drawable.ic_launcher); d.setBounds(0, 0, 50, 50); //必须设置图片大小,否则不显示 mTVText.setcompoundDrawables(d , null, null, null);
有时我们的软件界面中有退出的功能,不能用Activity中的finish
()了事,因为有时你的应用中有多个Activity,我在网上搜了如何
完全退出应用,不外乎三种方法:
1 使用ActivityManager的killBackgroundProcees方法,这种
方法还要加应用权限,且不是所有版本SDK中通用,相关代码如下:
ActivityManager manager = (ActivityManager)
context.getSystemService(Context.ACTIVITY_SERVICE); manager.killBackgroundProcees("package");
2 杀进程:
使用android.os.Proce.killProce
(android.os.Proce.myPid());或者System.exit(0);
3 还是使用ActivityManager的restartPackage方法:
manager.restartPackage("package"); 不知道为何,我都是不成功,后来使用广播机制终于可以了,如果
有朋友也和我一样,以上方法都不灵,试试广播机制,也不需要什
么权限。做法奉上:
1、先写一个父类继承Activity,其他的Activity都继承此父类,
重要的两个方法如下:
? private BroadcastReceiver broadcastReceiver = new
BroadcastReceiver() {
@Override public void onReceive(Context arg0, Intent arg1) { // TODO Auto-generated method stub finish(); } };
@Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); IntentFilter filter = new IntentFilter(); filter.addAction("ExitApp"); this.registerReceiver(broadcastReceiver, filter); } 当然你也可以每个Activity都写以上的代码。
1、然后在需要退出的Activity中添加如下方法:
? //发送广播通知所有窗体关闭 public void close() { Intent intent = new Intent(); intent.setAction("ExitApp"); this.sendBroadcast(intent); super.finish(); } 需要退出时调用一下。
Web应用中防止用户重复登录的简单实现方法
主要使用application, listener, 把用户id和用户对象放到
ConcurrentHashMap中,再存入application中
1、登录时把id和对象放到application中
2、登出时把remove掉
3、listener seionDestroyed的时候,把对象seion的key从
application中去掉
一、登录时
// 2009.10.29 防止多处登录
Object onlineUsersObject = seion.getServletContext
().getAttribute(Constants.ONLINE_USERS_KEY); logger.info("on line user object is null: {}", null ==
onlineUsersObject);
if (null != onlineUsersObject) { // 不为空,说明有用户在
线。
Map onlineUsersMap = (Map
UserInfo>) onlineUsersObject; logger.info("----------00
1、打印在线用户 id 列表(检查用户
是否已经在列表中)---"); for (Long id : onlineUsersMap.keySet()) { logger.info(String.valueOf(id)); } logger.info
("-----------------------
------------------"); for (Long id : onlineUsersMap.keySet()) { if (id.equals(userInfo.getId())) { logger.info("{} == {}", id, userInfo.getId()); msg = super.getMeage(request,
"login.failed.username.hadLogined"); super.renderJavaScript(response,
"window.onload=function(){alert("" + msg + "");location.href="login.do" + queryString + ""}"); return null; } } }
// 2009.10.29 防止多处登录
// Object onlineUsersObject = seion.getServletContext
().getAttribute(Constants.ONLINE_USERS_KEY); if (null != onlineUsersObject) { Map onlineUsersMap = (Map
UserInfo>) onlineUsersObject; onlineUsersMap.put(ui.getId(), ui); } else { Map onlineUsersMap = new
ConcurrentHashMap(); onlineUsersMap.put(ui.getId(), ui); seion.getServletContext().setAttribute
(Constants.ONLINE_USERS_KEY, onlineUsersMap); } logger.info("----------00
2、登录后打印在线用户列
表-------------"); for (Long id : ((Map)
seion.getServletContext().getAttribute
(Constants.ONLINE_USERS_KEY)).keySet()) { logger.info(String.valueOf(id)); } logger.info
("-----------------------
------------------");
二、登出时
HttpSeion seion = request.getSeion(false); UserInfo ui = (UserInfo) seion.getAttribute
(Constants.USER_INFO);
// 在 application 中删除已经注销的用户
Object onlineUsersObject = seion.getServletContext
().getAttribute(Constants.ONLINE_USERS_KEY); if (null != onlineUsersObject) { Map onlineUsersMap = (Map
UserInfo>) onlineUsersObject; logger.info("user is null ? {}", ui); if (null != ui) { onlineUsersMap.remove(ui.getId()); } logger.info("------00
3、手动注销前打印在线用户列
表-------------"); for (Long id : onlineUsersMap.keySet()) { logger.info(String.valueOf(id)); } logger.info
("-----------------------
------"); }
if (null != seion) { seion.removeAttribute(Constants.USER_INFO); seion.invalidate(); }
if (null != onlineUsersObject) { Map onlineUsersMap = (Map
UserInfo>) onlineUsersObject; onlineUsersMap.remove(ui); logger.info("------00
4、手动注销后打印在线用户列
表-------------"); for (Long id : onlineUsersMap.keySet()) { logger.info(String.valueOf(id)); } logger.info
("-----------------------
------"); }
三、OnlineSeionListener public void seionDestroyed(HttpSeionEvent
httpSeionEvent) { HttpSeion seion = httpSeionEvent.getSeion(); logger.info("seionDestroyed:{};seion id is {}",
seion, seion.getId());
Object onlineUsersObject = seion.getServletContext
().getAttribute(Constants.ONLINE_USERS_KEY);
UserInfo userInfo = (UserInfo) seion.getAttribute
(Constants.USER_INFO); logger.info("userInfo is null:{}", null == userInfo);
if (null != onlineUsersObject && null != userInfo) { Map onlineUsersMap = (Map
UserInfo>) onlineUsersObject; logger.info("---------------从在线列表中移除超时用户id前打
印在线用户列表-------------"); for (Long id : onlineUsersMap.keySet()) { logger.info(String.valueOf(id)); } logger.info
("-----------------------
------"); for (Long id : onlineUsersMap.keySet()) { if (id.equals(userInfo.getId())) { logger.info(String.valueOf(id)); onlineUsersMap.remove(id); } } logger.info("---------------从在线列表中移除超时用户id后打
印在线用户列表-------------"); for (Long id : onlineUsersMap.keySet()) { logger.info(String.valueOf(id)); } logger.info
("-----------------------
------"); }
进程的异常:
java.lang.RuntimeException: Can"t create handler inside
thread that has not called Looper.prepare() 已解决:在thread的run()里加入一个语句Looper.prepare();
根据Android SDK api文档说明
invalidate 方法是用来更新视图(View)的方法,不过这东西的用
法比较古怪
invalidate 方法如果你直接在主线程中调用,是看不到任何更新的
。
如果跟线程结合使用的话 比如在下面的代码中就会抛出异常 UIThread implements Runnable{ public void run(){ invalidate(); } }
上面的代码会抛出Only the original thread that created
a view hierarchy can touch its views。
怎么样解决上面的问题呢,如果你有两个View,你需要一个
View用来显示当前的状态,一个Thread去下载网络数据
或者是读取文件等,这些数据读取完毕后你要更新View到当前
屏幕上怎么办呢。看看下面的代码,也许可以帮助你
第一种解决方案是:
cla UIUpdateThread implements Runnable{
public void run() { try { Thread.sleep(1000*5); mHandler.post(mUpdateResults); } catch (InterruptedException e) { e.printStackTrace(); } }
final Handler mHandler = new Handler(); final Runnable mUpdateResults = new
Runnable() { public void run() { invalidate(); //更新视图 } }; }
你必须实现一个Handler.然后再你下载数据的线程中放上一个
mHandler.post(mUpdateResults);这样就可以了。
第2中方案比较简单 LoadDataThread implements Runnable{ public void run(){ doLoadData(); mHandler.sendMeage(mHandler.obtainMeage()); //这里
系统会自动调用handleMeage;
这样就可以更新视图了 } }
Handler mHandler = new Handler(){ @Override public void handleMeage(Meage msg) { super.handleMeage(msg); // 这里处理视图需要更新的代码。
} };
有时我们的程序需要运行一些耗费时间的操作,当进行这些操作时
,我们不能让界面假死,不然用户会以为是死机或者卡住了。这时
候,我们就需要通过运行一个ProgreDialog来告诉用户:“你看
,我没死,我还活着,我还能转!”。
当然,还要有Thread的配合
,才能完成这个任务。
下面是一开始我自己写的代码,虽然思路对了,但是有些繁琐:
[java]//声明变量
private ProgreDialog pDialog = null; Boolean startView = false; private Handler handler; private Thread mThread;
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //显示Dialog pDialog = new ProgreDialog(this); pDialog.setProgreStyle(ProgreDialog.STYLE_SPINNER); pDialog.setMeage("Loading…."); pDialog.show();
//定义Handler对象 handler = new Handler() { public void handleMeage(Meage msg) { startView = msg.getData().getBoolean("start"); if(startView) { //关闭Dialog pDialog.dismi(); } } }; //启动线程
mThread=new Thread(this); mThread.start(); } //在下面的线程中运行耗时方法 public void run() { //耗时方法
longTimeMethod();
//handler传回“准备好”的信息
Meage msg = handler.obtainMeage(); Bundle data = new Bundle(); data.putBoolean("start", true); msg.setData(data); handler.sendMeage(msg); }[/java] 这样写的好处是Meage可以传回不同类型的值,可以应对不同需要
。后来在网上看见了一种简便方法,顿时觉得自己这只菜鸟还要好
好学习啊。
代码是这样的:
[java]//声明变量 private Button b1; private ProgreDialog pd;
//定义Handler对象
private Handler handler =new Handler(){ @Override //当有消息发送出来的时候就执行Handler的这个方法 public void handleMeage(Meage msg){ super.handleMeage(msg); //只要执行到这里就关闭对话框 pd.dismi(); } };
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
private void proceThread(){ //构建一个下载进度条
pd= ProgreDialog.show(MainHandler.this, "Load",
"Loading…"); new Thread(){ public void run(){ //在新线程里执行长耗时方法 longTimeMethod(); //执行完毕后给handler发送一个空消息 handler.sendEmptyMeage(0); } }.start(); }[/java] 这样的写法比较简洁,运行效率也高。
幼儿工作体会心得体会(共12篇)
缝纫工作心得体会(共12篇)
仓库工作心得体会(共12篇)
工作实习心得体会(共12篇)
工作心得体会开头语(共12篇)
版权声明:
1.十号范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《android工作心得体会十二篇》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。
本栏目阅读排行
栏目最新
- 12024年度在全市市场监管工作会议上讲话(完整)
- 22024年某市退役军人事务局工作总结及2024年工作计划(范文推荐)
- 32024年度(6篇)关于物业管理公司党支部党建工作计划(精选文档)
- 42023年度三季度安全工作计划三篇 (完整文档)企业第三季度计划
- 52024年深入学习领会总书记关于新时代人才工作新理念新战略新举措,切实增强做好人才工作政治自觉、思想自觉和行动自觉——在全市人才工作会议上讲话
- 6某镇“万企兴万村”工作开展情况汇报【精选推荐】
- 72024年度在全市“双减”工作推进会议上讲话
- 82024年XX镇工作开展情况报告(范文推荐)
- 92024年第一季度工作效能提升行动工作开展情况报告【完整版】
- 10有关于某乡河长制工作述职报告
- 112024年在行政复议工作会议上讲话
- 122024年度追赶“春山”,此心惟坚——公司党群工作部在重装集团宣传思想工作会上表态发言