10天学安卓-第二天

10天学安卓-第二天
原文:10天学安卓-第二天

继续我们的学习。

相信我,第一天的工作是最为重要的,通过这些工作,我们把开发安卓所必须的环境、基础条件都配置好了,相信肯定遇到了很多问题,不过,根据我的经验,您会很快解决这些问题的。在第一天的最后,我们终于运行了第一个应用->“Hello, world”。

理论知识

下面我们学习一些理论知识,了解一下安卓系统的架构、组件,有了一些基础知识,才不会感觉迷惑。

先看下整个项目的目录,每个目录都有特定的作用,分别如下:

  • src目录,存放源代码文件。
  • gen目录,由ADT插件自动生成的R.java文件。
  • assets目录,存放资源文件目录。此目录的文件不会在R.java中生成资源ID,不会被编译为二进制,必须使用/assets开始的相对路径按照文件的方式进行访问,可以使用AssetManager 结合其他类进行访问。
  • res目录,存放资源文件目录,这里面的每个文件或值都会在R.java中生成一个ID(变量);res/drawable-xxxx是存放图片的目录;res/layout是放置布局文件(xml文件)的目录,每个Activity对应一个XML文件;res/values是放置存储值的文件(xml)的目录;res/values/strings.xml 存放键值对,一般用在程序的多语言版本切换(多个文件,键一样,值不同);res/values/dimens.xml 尺寸;res/values/styles.xml 样式
  • AndroidManifest.xml是整个应用程序的配置文件,储存一些 包名,版本号,程序图标,程序标签等。
  • project.properties,由ADT插件自动生成,不能修改(修改将被删除)。

 

对于项目结构有了初步的了解之后,我们就可以有目的的开始我们的工作了。接下来的10天,我们将一步一步实现一个完整的天气预报应用,请注意:是完整的,而不只是Demo。

我们最终的页面效果如下所示:

device-2015-01-18-130830

 

任务分解

不要被吓到,不管现在看起来多么复杂,这终究会从我们的手中实现。为了实现这样的一个应用,我们需要分为一个一个小项目,这样看起来就不是那么庞然大物,我们心里底气也足了。

如果您曾经做过项目管理相关工作的话,那么对于WBS(工作分解结构)一定很熟悉了,我们的应用规模不算大,可以分解为如下小项目:

1. 学习调用HTTP接口,将返回的JSON数据封装为Java类,并且最终将天气数据展示到页面上

2. 学习使用百度地图SDK定位当前位置,并将当前位置信息保存为本地数据

3. 如果没有网络,我们就没办法查看天气了吗?这当然是有问题的,我们要把天气数据保存到本地数据库,并且默认显示本地数据

4. 美化UI

在这短短的10天内,我们要把这些工作都做完,不要犯怵,Follow me!!!

千里之行始于足下

新建一个工程,Application Name填Weather,Package Name填com.demo.weather,SDK各个项目的选择如下:

QQ截图20140910225041

 

选择好之后,就一路点击【Next】直到我们的项目建好为止,建好的项目应该是这样子的:

QQ截图20140910225349

 

打开res/layout/activity_main.xml,在Eclipse中应该是这个样子的:

QQ截图20140910225709

 

注意视图的下方有两个Tab选项卡,【Graphical  Layout】是图形视图,【activity_main.xml】是代码视图,我们切换为代码视图,在TextView处添加一行代码,

android:id="@+id/weather"

这样,我们就可以在代码中使用findViewById方法找到这个TextView控件,不过,为了代码的美观,我们将使用另外的办法。

使用第三方组件

大家都知道,Android是开源的,所以就有很多具有奉献精神的牛人把自己的经验、收获分享给大家,这就是很多很多的开源代码、组件、框架。

在这里我们引入第一个开源组件——xUtils,可以在https://github.com/wyouflf/xUtils这里查看它的详细说明。

首先,下载jar包,并且导入到我们的工程里面,说起来麻烦,做起来那是相当简单。下载地址:https://github.com/wyouflf/xUtils/blob/master/xUtils-2.6.11.jar,然后将下载下来的文件放到工程项目的libs文件夹就可以了。

如何在项目中使用呢?

如果大家懒得看xUtils的文档,那就跟着我一步一步做就好了。

打开src目录下,com.demo.weather的MainActivity文件,添加一个变量,可以命名为txtWeather。

@ViewInject( R.id.weather )
private TextView txtWeather;

这样,我们就可以在代码中使用TextView这个控件了。

接下来,我们看一下onCreate方法,这个方法现在只有两行代码,

super.onCreate( savedInstanceState );
setContentView( R.layout.activity_main );

 

其中第一行,调用父类的onCreate方法进行界面的绘制,第二行就是加载界面,这两行代码在所以的Activity的子类都是需要调用的,除非你不在界面显示任何内容。

onCreate方法有一个参数savedInstanceState,关于这个我们稍后细说,先说第二行代码

setContentView( R.layout.activity_main );

R.layout.activity_main指向了res/layout/activity_main.xml这个文件,这样界面就知道应该加载这个界面文件了。可能大家都Activity是什么还有些疑惑,不要紧,这些理论知识我们明天再说,今天我们的任务就是把天气数据显示到界面上。当然,我们自己是不知道天气预报数据的,不过万能的互联网什么都有,百度就提供了这方面的数据。

官方文档:http://developer.baidu.com/map/index.php?title=car/api/weather,

一个例子:http://api.map.baidu.com/telematics/v3/weather?location=%E5%8C%97%E4%BA%AC&output=json&ak=YknGmxIoPugT7YrNrG955YLS

好了,万事俱备,只欠代码。如何把天气显示到界面上,总共分三步:

1. 在界面上放置一个TextView用于显示文字,这个我们已经完成了。

2. 调用百度地图的API,获取天气数据,这个我们接下来就要做。

3. 把数据显示到界面上。

松了一口气,喝杯茶,休息十分钟吧,接下来会有大段的代码等着你来完成。

 

休息好了吧,我们马上开工。

在onCreate方法的setContentView下面添加以下代码,

        ViewUtils.inject( this );HttpUtils http = new HttpUtils();RequestParams params = new RequestParams();params.addQueryStringParameter( "location", "北京" );params.addQueryStringParameter( "output", "json" );params.addQueryStringParameter( "ak", "YknGmxIoPugT7YrNrG955YLS" );http.send( HttpMethod.GET, "http://api.map.baidu.com/telematics/v3/weather", params, new RequestCallBack<String>(){@Overridepublic void onSuccess( ResponseInfo<String> responseInfo ){String weather = responseInfo.result;txtWeather.setText( weather );}@Overridepublic void onFailure( HttpException arg0, String arg1 ){String weather = arg1;txtWeather.setText( weather );}} );

并且删除onCreateOptionsMenu方法。

保存吧,一大段的代码,一大片的红叉,呵呵,不着急,慢慢来,那是因为我们使用了第三方组件的原因,一项一项把缺失的引用添加进来就可以了。如果你嫌麻烦,那么复制这几行代码吧。

import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import com.lidroid.xutils.view.annotation.ViewInject;

 

这下大家满足了吧,一切看起来都是那么的顺利和完美,来,运行程序。

你看到的可能是这样的内容:

java.io.IOException: Permission denied (missing INTERNET permission?)

为什么?为什么?为什么?

辛辛苦苦,XX都X了,你就让我看这个。

不着急,不着急,上面写得很明白,没有访问网络的权限,那么,在项目里面找到AndroidManifest.xml这个文件,添加一行代码即可。

<uses-permission android:name="android.permission.INTERNET" />

把这行代码加到 <application 的前面就可以了,好了,一切都OK了。运行吧。

这下界面上显示的就是一大堆天气的数据了。

device-2015-01-18-131401

 

如果显示的还不正确,那么请仔细检查一下是否有遗漏的代码,是否真的可以连上网络。

如果您可以正确的显示上面那一大堆字符,并且能正确理解那一大堆字符的意义,并且对于界面什么的也没有要求的话,那么我们的天气预报APP就可以给自己独家使用了。很有成就感了是不是,不过,这样的应用除了自己谁会用呢?恐怕连自己也是看都不想看吧。

如果您有更要的要求,那么,明天我们继续。

 

附件是本次的工程文件,点击下载。

posted on 2015-02-02 09:06 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/4266783.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

德国费斯托又双叒叕更新,象鼻子机械臂+超逼真仿生手,比人手都强大

来源&#xff1a;机器人大讲堂编辑&#xff1a;海蛟摘要&#xff1a;在机器人领域&#xff0c;小编最佩服两家公司&#xff0c;一家是波士顿动力&#xff0c;另一家就是费斯托。费斯托这家源自德国的公司以平均每年更新2-3款仿生机器人的速度&#xff0c;扩充着它们的仿生机器人…

微软全球执行副总裁沈向洋:你给自己的定位是什么,你就会得到什么

来源&#xff1a;AI 科技评论摘要&#xff1a;沈向洋&#xff0c;美国国家工程院院士、微软全球执行副总裁、ACM/IEEE Fellow。多年来&#xff0c;沈向洋专注于计算机视觉和计算机图形学的研究&#xff0c;并领导和开发了 Bing 搜索。目前&#xff0c;他是微软公司级别最高的中…

用互联网大脑模型分析5G重点影响的6个科技产业

作者&#xff1a;刘锋 计算机博士&#xff0c;《互联网进化论》作者5G是指第五代移动电话行动近信标准&#xff0c;也称第五代移动通信技术&#xff0c;是4G之后的延伸&#xff0c;其峰值理论传输速度可达每秒数十Gb。对比4G的主要提高如下&#xff1a;5G的速度将达到4G的100倍…

Gartner:2019年十大数据与分析技术趋势

来源&#xff1a;网络大数据近日&#xff0c;全球领先的信息技术研究和顾问公司Gartner指出&#xff0c;增强型分析(augmented analytics)、持续型智能(continuous intelligence)与可解释型人工智能(explainable AI)是数据与分析(data and analytics)技术领域内的主要趋势之一&…

Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步

目录 1, 环境2, Redis简介3, Gearman简介4, MySQL - Redis配合使用方案4, 软件安装5, MySQL UDF Trigger同步数据到Gearman6, 参考资料1, 环境 CentOS, MySQL, Redis, Nodejs 2, Redis简介 Redis是一个开源的K-V内存数据库&#xff0c;它的key可以是string/set/hash/list/...&…

5G风起,四大IoT迎风爆发!智能家居与电表高速增长

来源&#xff1a;智东西摘要&#xff1a;深度剖析智能家居、智能城市、车联网、网联无人机四大领域新机遇。2018年&#xff0c;我国物联网&#xff08;IoT&#xff09;连接数从2017年的15.4亿飙升至30.63亿&#xff0c;几近增长了100%&#xff0c;增速喜人。而在这组数据背后&a…

机器学习基石笔记5——为什么机器可以学习(1)

转载请注明出处&#xff1a;http://www.cnblogs.com/ymingjingr/p/4271742.html 目录 机器学习基石笔记1——在何时可以使用机器学习(1) 机器学习基石笔记2——在何时可以使用机器学习(2) 机器学习基石笔记3——在何时可以使用机器学习(3)(修改版) 机器学习基石笔记4——在何时…

PPT|工业互联网关键技术专利态势

来源&#xff1a;中国信通院CAICT摘要&#xff1a;《工业互联网关键技术专利态势分析&#xff08;2019&#xff09;》对工业互联网的三个重要体系进行深入知识产权分析。以下PPT资料是工业互联网产业联盟和中国信通院团队对《工业互联网关键技术专利态势分析&#xff08;2019&a…

生命简史——跨越地球40亿年

来源&#xff1a;新原理研究所摘要&#xff1a;你一定也曾好奇过&#xff0c;地球上的生命究竟是如何起源和演化的&#xff1f;它又是如何从简单的原核细胞不断地演化成复杂的多细胞&#xff1f;如此多元化的物种是如何进化而成的&#xff1f;每一次变化都历经了怎样的挑战与压…

图论解决复杂路口红绿灯安排,python语言实现

文章目录问题描述说明性描述操作性描述图着色问题图着色算法算法精化和python描述算法细节处理&#xff1a;python实现讨论问题描述 说明性描述 说明性描述说明了需要解决的问题是什么&#xff0c;针对什么样的问题&#xff0c;期望什么样的解 这是一个5条路的交叉口&#x…

从算法到硬件,一文读懂2019年 AI如何演进

来源&#xff1a;图灵TOPIA翻译&#xff1a;黄姗&#xff0c;杨鹏岳在刚刚过去的2018年&#xff0c;人工智能领域的大事件、新发现和新进展层出不穷。BERT重磅发布&#xff0c;刷新了很多NLP的任务的最好性能&#xff1b;GAN相关研究论文持续增长&#xff0c;生成的照片达到了以…

《阿丽塔》脑机接口正从科幻走向现实

来源&#xff1a;zhongcap摘要&#xff1a;《流浪地球》和《阿丽塔》前后脚上映&#xff0c;难免不让人比较一番。科幻片的魅力&#xff0c;在于它试验和想象未来的可能性。昨天晚上小编去看了卡梅隆的新作《阿丽塔&#xff1a;战斗天使》。《流浪地球》和《阿丽塔》前后脚上映…

全球首个AI女主播上岗了!太惊艳了!

来源&#xff1a;水木然摘要&#xff1a;前不久&#xff0c;全球首个AI女主播诞生的消息走红网络&#xff01;刚刚&#xff0c;这位AI女主播今天正式上岗了&#xff01;是不是非常惊艳&#xff1f;如果不是专门解释&#xff0c;她极有可能被为是真人&#xff01;这位全球首个AI…

有原创保护能力的公众帐号可申请页面模版功能和图文消息正文插入历史群发链接...

之前微信公众平台仅针对开通了微信支付的公众号支持插入图文消息链接&#xff0c;现在微信团队对有原创保护能力的公众帐号开放页面模版功能、开放图文消息正文插入历史图文链接。&#xff08;怎样申请成为有原创保护能力的公众帐号&#xff1f;也许有人会把页面模版和模板消息…

重磅!华为宣布起诉美国政府

来源&#xff1a;网易智能摘要&#xff1a;今天&#xff0c;华为在深圳总部召开发布会&#xff0c;宣布决定起诉美国政府。01指责美国政府窃取华为服务器华为宣布针对美国《2019财年国防授权法》第889条的合宪性向美国联邦法院提起诉讼&#xff0c;请求法院判定这一针对华为的销…

Spire.Pdf 的各种操作总结

Spire.Pdf 的各种操作总结简介 试验新产品总是给我带来许多挑战&#xff0c;当然这也是一个引进创新技术的好方法。在这里我要跟大家分享的是使用Spire.Pdf的过程&#xff0c;它是来自E-iceblue公司的轻便PDF程序库。 设计情节我以前经常没事就搞搞PDF。Spire.Pdf是用C# 写的PD…

从观望到行动:全球工业物联网市场生态全景观察

来源&#xff1a;资本实验室在当前&#xff0c;诸如5G&#xff0c;物联网、边缘计算、人工智能、机器人、区块链、增材制造和虚拟现实/增强现实等技术正在加速融合到工业物联网&#xff08;Industrial Internet of Things&#xff0c;IIoT&#xff09;的肥沃土壤中&#xff0c;…

OC语言知识6

本文目录 一、异步POST请求二、NSURLConnection的其他请求方法上一讲介绍了iOS中的异步GET请求&#xff0c;这讲来看看异步POST请求。 回到顶部一、异步POST请求 假如请求路径是http://192.168.1.102:8080/MJServer/login&#xff0c;请求参数有2个&#xff1a; username &…

谁能引领国内人工智能芯片产业突围?

来源&#xff1a;国金证券摘要&#xff1a;我们认为中国在处理器/芯片领域的投资有加速的迹象&#xff0c;AI芯片的创业企业目前已达到40家左右。未来因人工智能边缘运算推理端和云端推理(Inferencing)芯片及设备成本,性能&#xff0c;耗电,效率的考量,以及各种处理器的特性不同…

OC语言知识12

本文目录 一、添加一个简单的图层二、添加一个显示图片的图层三、为什么CALayer中使用CGColorRef和CGImageRef这2种数据类型&#xff0c;而不用UIColor和UIImage&#xff1f;四、UIView和CALayer的选择五、UIView和CALayer的其他关系* 上一讲已经说过&#xff0c;UIView内部默认…