zoukankan      html  css  js  c++  java
  • 学安卓

    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 = responseInfo.result;
                    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了。运行吧。

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

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

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

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

     

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

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

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

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

     
    随笔分类 - 10天学安卓
     
    10天学安卓-第二天
    摘要: 继续我们的学习。相信我,第一天的工作是最为重要的,通过这些工作,我们把开发安卓所必须的环境、基础条件都配置好了,相信肯定遇到了很多问题,不过,根据我的经验,您会很快解决这些问题的。在第一天的最后,我们终于运行了第一个应用->“Hello, world”。理论知识下面我们学习一些理论知识,了解一下安卓...阅读全文
    posted @ 2015-01-18 13:24 Game_over 阅读(227) | 评论 (3) 编辑
     
    10天学安卓-第一天
    摘要: 说明1:本系列教程仅针对新手入门,高手勿入!说明2:本系列教程均不考虑安卓版本低于4.0的情况。说明3:本系列教程假定您了解一些编程的基础知识,对于Java语言略懂即可。说点废话从什么时候说起呢,应该是很久以前的事情了。2008年的早春,因为工作的原因在日本工作了一个月,当我和同事们在商场闲逛的时候...阅读全文
    posted @ 2015-01-17 15:15 Game_over 阅读(581) | 评论 (4) 编辑
  • 相关阅读:
    MAC电脑操作快捷键
    Xcode的控制台调试命令
    iOS 页面间传值
    App开机动画
    TCP/IP长连接和短连接
    Using the Transient Fault Handling Application Block
    [转]数据库并发控制 乐观锁,悲观锁
    [转]网站度量指标
    dictionary 和 hashtable 区别
    负载均衡策略
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4232456.html
Copyright © 2011-2022 走看看