目录

  • 模块1 Android UI设计
    • ● 版本与程序
    • ● 学习目标
    • ● 本章PPT
    • ● 任务1-1 线性布局应用示例
    • ● 任务1-2 帧布局应用示例
    • ● 任务1-3 表格布局应用示例
    • ● 任务1-4 相对布局应用示例
    • ● 任务1-5 网格布局应用示例
    • ● 任务1-6 约束布局应用示例
    • ● 任务1-7 文本标签组件示例
    • ● 任务1-8 制作登陆界面
    • ● 任务1-9 进度条ProgressBar应用示例
    • ● 任务1-10 单选按钮与复选按钮
    • ● 任务1-11 简单列表示例
    • ● 任务1-12 ListActivity示例
    • ● 任务1-13 带有图片的列表(选做)
    • ● 任务1-14 没有数据的ListView(选做)
    • ● 任务1-15 改进的列表(选做)
    • ● 实战演练——生肖背后的故事
  • 模块2   Activity与多个用户界面
    • ● 学习目标
    • ● 本章PPT
    • ● 任务2-1 从Activity启动另一个Activity示例
    • ● 任务2-2 传递数据到第二个Activity示例
    • ● 实战演练-生肖的界面跳转
    • ● 任务2-3 消息提示Toast示例
    • ● 任务2-4 消息对话框示例
    • ● 任务2-5 选项菜单应用示例
    • ● 任务2-6 上下文菜单应用示例
    • ● 实战演练——BMI体质指数计算器
  • 模块3   多媒体播放与录制
    • ● 学习目标
    • ● 本章PPT
    • ● 任务3-1 音乐播放器, 播放项目资源中的音乐
    • ● 任务3-2 音乐播放器, 播放SD卡中的音乐
    • ● 任务3-3 应用MediaPlayer设计视频播放器
    • ● 任务3-4 应用VidioView设计视频播放器
    • ● 任务3-5 录音示例
    • ● 任务3-6 拍照示例
    • ● 实战演练——音乐播放器
  • 模块4   广播与服务
    • ● 学习目标
    • ● 本章PPT
    • ● 任务4-1 消息广播程序示例
    • ● 任务4-2 系统通知服务示例
    • ● 任务4-3 广播和时钟服务示例
    • ● 任务4-4 调用系统功能拨打电话
    • ● 任务4-5 后台音乐服务示例
    • ● 实战演练——播放后台音乐
  • 模块5   数据存储
    • ● 学习目标
    • ● 本章PPT
    • ● 任务5-1 内部存储文件示例
    • ● 任务5-2 SD文件示例
    • ● 任务5-3 JSON数据示例
    • ● 任务5-4 SharedPreferences示例
    • ● 任务5-5 创建与删除数据库示例
    • ● 任务5-6 数据库记录的操作示例
    • ● 实战演练——掌上日记本
  • 模块6   图像和动画
    • ● 学习目标
    • ● 本章PPT
    • ● 任务6-1 绘制几何图形示例
    • ● 任务6-2 补间动画示例
    • ● 任务6-3 属性动画示例
    • ● 任务6-4 ImageView图像浏览示例
    • ● 任务6-5 ImageSwitcher展示相册示例
    • ● 任务6-6 GridView展示相册示例
    • ● 任务6-7 游戏中触屏事件示例
    • ● 实战演练——图片与动画
  • 模块7   网络编程
    • ● 学习目标
    • ● 本章PPT
    • ● 任务7-1 应用WebView的对象浏览网页
    • ● 任务7-2 从Web服务器读取图像文件
    • ● 任务7-3 读取JSON数据
    • ● 任务7-4 解析JSON数据
    • ● 实战演练——城市天气预报
  • 模块8   分享动漫
    • ● 学习目标
    • ● 制作步骤PPT
    • ● 示范视频
    • ● 学生作品展示
  • 模块9   天气预报
    • ● 学习目标
    • ● 制作步骤PPT
    • ● 示范视频
  • 课程资源
    • ● 学生资源包
    • ● 网站地址
实战演练——城市天气预报

实战演练—城市天气预报

设计一个城市天气预报的应用,运行效果如下图所示。数据来源可以使用网络提供的免费JSON数据。这里使用http://wthrcdn.etouch.cn/weather_mini?city=北京

  

数据来源推荐:

(1)国家气象局网站API, 北京是http://www.weather.com.cn/data/cityinfo/101010100.html,它的城市ID是101010100,这个ID是一个9位的数字,按照长度可以分为4部分:101(国家代号)、01(省)、01(二级地区)、00(三级地区)。

(2)本书第9章项目用到的天气数据接口,调用方法如下:

    http://wthrcdn.etouch.cn/weather_mini?city=北京                 //通过城市名字获得json天气数据

    http://wthrcdn.etouch.cn/weather_mini?citykey=+cityCode   //通过城市 id 获得json天气数据,例如

    http://wthrcdn.etouch.cn/weather_mini?citykey=101010100  //北京

例如,深圳的城市代码为101280601

则调用地址是http://wthrcdn.etouch. cn/weather_mini?citykey=101280601

API返回的JSON数据样本如下:

{"data":{"yesterday":{"date":"15日星期日","high":"高温 29℃","fx":"无持续风向","low":"低温 25℃","fl":"<![CDATA[<3级]]>","type":"中雨"},"city":"深圳","aqi":"27","forecast":[{"date":"16日星期一","high":"高温 31℃","fengli":"<![CDATA[<3级]]>","low":"低温 26℃","fengxiang":"无持续风向","type":"多云"},{"date":"17日星期二","high":"高温 33℃","fengli":"<![CDATA[<3级]]>","low":"低温 27℃","fengxiang":"无持续风向","type":"雷阵雨"},{"date":"18日星期三","high":"高温 34℃","fengli":"<![CDATA[<3级]]>","low":"低温 27℃","fengxiang":"无持续风向","type":"阵雨"},{"date":"19日星期四","high":"高温 34℃","fengli":"<![CDATA[4-5级]]>","low":"低温 27℃","fengxiang":"东北风","type":"阵雨"},{"date":"20日星期五","high":"高温 34℃","fengli":"<![CDATA[5-6级]]>","low":"低温 28℃","fengxiang":"东北风","type":"阵雨"}],"ganmao":"各项气象条件适宜,发生感冒概率较低。但请避免长期处于空调房间中,以防感冒。","wendu":"31"},"status":1000,"desc":"OK"}


可以使用在线JSON视图查看器,或者给浏览器安装JsonView插件,使用JSON视图看上述数据,结果如下:

{

    "data": {

        "yesterday": {

            "date": "15日星期日",

            "high": "高温 29℃",

            "fx": "无持续风向",

            "low": "低温 25℃",

            "fl": "<![CDATA[<3级]]>",

            "type": "中雨"

        },

        "city": "深圳",

        "aqi": "27",

        "forecast": [{

            "date": "16日星期一",

            "high": "高温 31℃",

            "fengli": "<![CDATA[<3级]]>",

            "low": "低温 26℃",

            "fengxiang": "无持续风向",

            "type": "多云"

        }, {

            "date": "17日星期二",

            "high": "高温 33℃",

            "fengli": "<![CDATA[<3级]]>",

            "low": "低温 27℃",

            "fengxiang": "无持续风向",

            "type": "雷阵雨"

        }, {

            "date": "18日星期三",

            "high": "高温 34℃",

            "fengli": "<![CDATA[<3级]]>",

            "low": "低温 27℃",

            "fengxiang": "无持续风向",

            "type": "阵雨"

        }, {

            "date": "19日星期四",

            "high": "高温 34℃",

            "fengli": "<![CDATA[4-5级]]>",

            "low": "低温 27℃",

            "fengxiang": "东北风",

            "type": "阵雨"

        }, {

            "date": "20日星期五",

            "high": "高温 34℃",

            "fengli": "<![CDATA[5-6级]]>",

            "low": "低温 28℃",

            "fengxiang": "东北风",

            "type": "阵雨"

        }],

        "ganmao": "各项气象条件适宜,发生感冒概率较低。但请避免长期处于空调房间中,以防感冒。",

        "wendu": "31"

    },

    "status": 1000,

    "desc": "OK"

}


(3)聊天机器人,含天气预报 http://api.qingyunke.com/

(4)其他免费稳定的天气预报API,参考阅读https://www.jianshu.com/p/e3e04cf3fc0f

不安装Volley库,直接使用Volley,可以手工修改工程的build.gradle,添加一句代码在dependencies 下面

    implementation 'com.android.volley:volley:1.1.0'

      参考下图:


操作示范如下(时长25:41)


Jason数据来源于 http://wthrcdn.etouch.cn/weather_mini?city=北京

WeatherActivity.java来源于案例7-4,由于Jason数据内容不同,提取数据有所区别,具体如下:

               //第3个参数,服务器响应成功的回调

                new Response.Listener<JSONObject>(){

                    @Override

                    public void onResponse(JSONObject response) {

                        try {

                            JSONObject mjson=response.getJSONObject("data");

                            String city=mjson.getString("city");

                            String wendu=mjson.getString("wendu");

                            String ganmao=mjson.getString("ganmao");

                            txt.setText(city+"\n"+wendu+"度,"+ganmao);

                            Log.i("天气", city+wendu+ganmao);


                            JSONArray forecast=mjson.getJSONArray("forecast");

                            for (int i=0; i<forecast.length();i++){

                                JSONObject ob = forecast.getJSONObject(i);

                                String str = ob.getString("date")+":"

                                        +ob.getString("high")+"-"

                                        +ob.getString("low")+","

                                        +ob.getString("type");

                                txt.append("\n"+str);

                            }

                        } catch (JSONException e) {

                            e.printStackTrace();

                        }

                    }

                },

                //第4个参数,服务器响应失败的回调

                ......


素材:一张图片