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>()
        {
            @Override
            public void onSuccess( ResponseInfo<String> responseInfo )
            {
                String weather = responseInfo.result;
                txtWeather.setText( weather );
            }

            @Override
            public 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就可以给自己独家使用了。很有成就感了是不是,不过,这样的应用除了自己谁会用呢?恐怕连自己也是看都不想看吧。

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

 

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

目录
相关文章
|
Java Android开发 iOS开发
10天学安卓-第一天
原文:10天学安卓-第一天 说明1:本系列教程仅针对新手入门,高手勿入! 说明2:本系列教程均不考虑安卓版本低于4.0的情况。 说明3:本系列教程假定您了解一些编程的基础知识,对于Java语言略懂即可。
1365 0
|
XML API Android开发
10天学安卓-第三天
原文:10天学安卓-第三天 经过第二天的学习,我们正确的调用了百度天气API,将天气信息显示到了界面上,做到这一步,我们的工作就算是完成1%了,剩下99%的工作就需要不断的润色这个未成形的APP了。 最首要的就是,我们要把那么一大堆字符转换为普通用户可以轻松理解的界面,那么我们来学习一下Android里面的界面布局。
885 0
|
JSON 程序员 Android开发
10天学安卓-第四天
原文:10天学安卓-第四天 继续昨天的学习。 昨天我们根据取得的天气数据新建了一个视图用来显示各项内容,那么今天我们就把数据显示出来吧!!! 这里我们要把数据和视图联系起来,那么就用到了适配器-Adapter,Android给我们提供了很多Adapter,这里我们用到了BaseAdapter。
971 0
|
Linux API Android开发
10天学安卓-第五天
原文:10天学安卓-第五天 经过前几天的练习,相信大家已经对如何做出一个简单的界面有了初步的了解,并且已经做出来一个还不错的天气列表了。 今天大家稍事休息,要练习的内容比较少,着重学习一些理论知识,先理清几个概念。
1115 0
|
存储 定位技术 API
10天学安卓-第六天
原文:10天学安卓-第六天 经过前几天的学习,我们的天气预报程序已经可以把天气正常的呈现出来了,正如之前说的,现在的APP只能显示固定地区的天气,那么我们要怎样才能显示我们本身所在地的天气呢? Android定位 Android系统本身提供了三种定位方式,分别是网络、基站和GPS,主要利用的是LocationManager、TelephonyManager相关的类库,但是因为一些原因,Google的API在国内访问经常出现问题,所以在这里我就不对这些API做介绍了,有想了解的可以自行查询相关资料。
979 0
|
Android开发
10天学安卓-第七天
原文:10天学安卓-第七天 我们上次学习了百度定位以及SharedPreferences的使用,不知道大家有没有注意到我们新加了一个方法: protected void onStop() { super.onStop(); mLocationClient.stop(); }   这个方法的作用是在界面停止的时候,同时停止百度定位功能。
899 0
|
Android开发 容器 数据格式
10天学安卓-第九天
原文:10天学安卓-第九天 接着昨天的任务,我们今天实现左右滑动可以切换城市的功能。 这里就需要引入新的控件了,Android给我们提供了ViewPager,我们就使用这个,同时,显示天气的界面我们也不再使用Activity,而改为Fragment。
751 0
|
Android开发
10天学安卓-第十天
原文:10天学安卓-第十天 本次是这个教程的最后一篇了,我们的APP开发基本上已经可以宣告完成了,接下来的工作就是如何发布推广运营了。   广告平台 古人云:兵马未动,粮草先行。我们身为APP开发者就需要考虑如何从APP盈利,目前通常的做法主要有APP收费、APP免费+内购及嵌入广告三种方式,我们这个简单的APP想让用户付费是比较有难度的,那么就只能通过嵌入广告的方式来赚取一点广告费了。
1112 0
|
20天前
|
搜索推荐 前端开发 API
探索安卓开发中的自定义视图:打造个性化用户界面
在安卓应用开发的广阔天地中,自定义视图是一块神奇的画布,让开发者能够突破标准控件的限制,绘制出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战技巧,逐步揭示如何在安卓平台上创建和运用自定义视图来提升用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开新的视野,让你的应用在众多同质化产品中脱颖而出。
42 19
|
20天前
|
JSON Java API
探索安卓开发:打造你的首个天气应用
在这篇技术指南中,我们将一起潜入安卓开发的海洋,学习如何从零开始构建一个简单的天气应用。通过这个实践项目,你将掌握安卓开发的核心概念、界面设计、网络编程以及数据解析等技能。无论你是初学者还是有一定基础的开发者,这篇文章都将为你提供一个清晰的路线图和实用的代码示例,帮助你在安卓开发的道路上迈出坚实的一步。让我们一起开始这段旅程,打造属于你自己的第一个安卓应用吧!
46 14