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。

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

 

任务分解

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

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

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

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

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

4. 美化UI

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

千里之行始于足下

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

 

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

 

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

 

注意视图的下方有两个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了。运行吧。

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

 

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

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

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

 

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

时间: 2024-09-24 03:26:41

10天学安卓-第二天的相关文章

10天学安卓-第八天

原文:10天学安卓-第八天 昨天郑州雨夹雪,还有冰雹,结果小区就断电了,真是悲剧.第八天的学习就挪到今天了. 经过前几天的学习,我们了解了一些Android的基础知识,并且做出了一个也算实用的天气预报APP,对Android也算得上是入门了,那么今天我们继续改进我们的APP. 这个APP现在只能查看所在城市的天气,那么万一妹子不跟我们一个城市,我们就不能关注到妹子所在城市的天气了,那还怎么嘘寒问暖呢,这个问题是一定要解决的.   如何解决? 那就是需要在一个界面上可以选择城市了,这就用到了数据库

10天学安卓-第三天

原文:10天学安卓-第三天 经过第二天的学习,我们正确的调用了百度天气API,将天气信息显示到了界面上,做到这一步,我们的工作就算是完成1%了,剩下99%的工作就需要不断的润色这个未成形的APP了. 最首要的就是,我们要把那么一大堆字符转换为普通用户可以轻松理解的界面,那么我们来学习一下Android里面的界面布局. 打开res/layout/activity_main.xml文件,切换到Layouts选项卡,可以看到里面有许多项目,GridLayout.LinearLayout.Relativ

10天学安卓-第十天

原文:10天学安卓-第十天 本次是这个教程的最后一篇了,我们的APP开发基本上已经可以宣告完成了,接下来的工作就是如何发布推广运营了.   广告平台 古人云:兵马未动,粮草先行.我们身为APP开发者就需要考虑如何从APP盈利,目前通常的做法主要有APP收费.APP免费+内购及嵌入广告三种方式,我们这个简单的APP想让用户付费是比较有难度的,那么就只能通过嵌入广告的方式来赚取一点广告费了. 我经常使用的广告平台就是Admob了,不过Admob国内被屏蔽,但是广告依然可以展示,各位程序员一定要学习科

10天学安卓-第六天

原文:10天学安卓-第六天 经过前几天的学习,我们的天气预报程序已经可以把天气正常的呈现出来了,正如之前说的,现在的APP只能显示固定地区的天气,那么我们要怎样才能显示我们本身所在地的天气呢? Android定位 Android系统本身提供了三种定位方式,分别是网络.基站和GPS,主要利用的是LocationManager.TelephonyManager相关的类库,但是因为一些原因,Google的API在国内访问经常出现问题,所以在这里我就不对这些API做介绍了,有想了解的可以自行查询相关资料

10天学安卓-第七天

原文:10天学安卓-第七天 我们上次学习了百度定位以及SharedPreferences的使用,不知道大家有没有注意到我们新加了一个方法: protected void onStop() { super.onStop(); mLocationClient.stop(); }   这个方法的作用是在界面停止的时候,同时停止百度定位功能.   联想到我们还有onCreate,那么这两个方法是做什么用的?是什么原理呢? 这就需要我们来了解一下Activity的生命周期. Activity生命周期 Ac

10天学安卓-第一天

原文:10天学安卓-第一天 说明1:本系列教程仅针对新手入门,高手勿入! 说明2:本系列教程均不考虑安卓版本低于4.0的情况. 说明3:本系列教程假定您了解一些编程的基础知识,对于Java语言略懂即可.   说点废话 从什么时候说起呢,应该是很久以前的事情了. 2008年的早春,因为工作的原因在日本工作了一个月,当我和同事们在商场闲逛的时候,发现了以前从未见过的电子设备,一款是大屏幕(当时可以称得上巨屏了)的手机,一款是超大容量(80G)的MP3,对了,也许聪明的你已经猜到了,一个是iPhone

10天学安卓-第五天

原文:10天学安卓-第五天 经过前几天的练习,相信大家已经对如何做出一个简单的界面有了初步的了解,并且已经做出来一个还不错的天气列表了. 今天大家稍事休息,要练习的内容比较少,着重学习一些理论知识,先理清几个概念. Android系统架构 Android系统本质上是Linux系统,但相对于Linux系统,主要在驱动.性能.内存管理.设备管理等一些部分做了比较多的改动,以更适用于移动设备. 从上图可以看到,Android系统架构为四层,分别是Linux内核.系统运行库.应用程序框架以及应用层,每一

10天学安卓-第四天

原文:10天学安卓-第四天 继续昨天的学习. 昨天我们根据取得的天气数据新建了一个视图用来显示各项内容,那么今天我们就把数据显示出来吧!!! 这里我们要把数据和视图联系起来,那么就用到了适配器-Adapter,Android给我们提供了很多Adapter,这里我们用到了BaseAdapter.   BaseAdapter(1) 右键点击src/com.demo.weather,选择 New > Class,按照下图填写: 选择[Finish]后,我们就新建了一个BaseAdapter的子类,打开

android-新手学安卓感觉好繁杂,希望走过来的前辈给点指导。

问题描述 新手学安卓感觉好繁杂,希望走过来的前辈给点指导. 在学安卓之前简单的看过JAVA,只是简单的看过,多线程通信什么的就不太有往下看.对着极客学院的视频开始学习安卓,用的AndroidStudio对着视频开始开始敲app,完全一模一样往下敲.并且我的电脑编译,模拟器启动也慢,都启动起来电脑就不能做其他事情了,内存占用毛90%.现在我对按照视频学期的学习方式疑惑了,现在学到fragment,侧滑菜单这些.感觉其实我并不知道为什么要这么写代码,建个fragment系统自动给你生成一大堆,许多方