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) 编辑
  • 相关阅读:
    MFC Windows 程序设计>WinMain 简单Windows程序 命令行编译
    AT3949 [AGC022D] Shopping 题解
    CF643D Bearish Fanpages 题解
    CF643C Levels and Regions 题解
    CF241E Flights 题解
    CF671C Ultimate Weirdness of an Array 题解
    CF1592F Alice and Recoloring 题解
    GYM 102452E 题解
    CF494C Helping People 题解
    P5556 圣剑护符
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/4232456.html
Copyright © 2011-2022 走看看