【Android项目】天气预报总结

图A

一、设置上网权限

在AndroidManifest.xml的<manifest …>…< /manifest>中添加如下内容:

<manifest ...> 
	...
	<!--添加上网权限-->
	<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>

二、异步线程,以便及时更新天气信息

在相应的ActivityonCreate()中添加
		/*0.开启一个异步线程,以便实时更新天气*/
        ReadJsonTask mytask=new ReadJsonTask();
        mytask.execute();
        /*1.获取天气数据*/
        //(1)获取JSON格式数据
        //(2)建立实体数据模型,以解析JSON格式
        /*2.将数据显示到控件上*/
        //(1)数据显示
        //(2)网络图片资源显示
//注:模板示例,无具体实现
//异步任务线程类
    class ReadJsonTask extends AsyncTask{

        /*protected  void onPreExecute(){
            super.onPreExecute();
            //在execute()调用后立即执行,一般用于设置任务前的准备
        }*/
        @Override
        protected Object doInBackground(Object[] params) {
            //在onPreExecute()后执行,用于较费时的操作
            //不能在该函数中更新UI组件

            /*1.获取UI线程中的信息*/
            result = null;
            return result;
        }
        /*protected void onProgressUpdate(Object[] values){
            //与publishProgress()配合使用,用于实时更新UI组件(如进度条)
            super.onProgressUpdate();
        }*/
        @Override
        protected void onPostExecute(Object result) {
            super.onPostExecute(result);
            //后台任务结束时调用,result为doInBackground()的返回值

            /*2.根据信息查询相应的天气信息*/
            /*3.将天气信息更新到UI线程中*/
        }
    }

三、彩云天气API说明

1.注册账号,获得令牌值token

请先至彩云开放平台注册,注册后可以获得 token 。
把您的 token 拼到 API 请求的 URL 中,如
https://api.caiyunapp.com/v2.5/TAkhjf8d1nlSlspN/121.6544,25.1552/weather.json
(格式:https://api.caiyunapp.com/v2.5/令牌值/城市经纬度/weather.json)
其中 TAkhjf8d1nlSlspN 就是一个共用测试 token 。不要把私有token 告诉任何人!

.2.API使用

示例如下:
// 第一个为获取城市的经纬度location":{"lat":23.081746,"lng":112.451073}// 第二个为利用经纬度获取天气数据"realtime":{"status":"ok","temperature":29.0,"humidity":0.76,"cloudrate":0.3,"skycon":"PARTLY_CLOUDY_DAY",
// https://api.caiyunapp.com/v2/place?token={令牌值}&lang=zh_CN&query=肇庆
// https://api.caiyunapp.com/v2.5/令牌值/112.451073,23.081746/realtime

提示:将网址直接输入到浏览器搜索栏,你获得的JSON数据,可能会看到的是保留转义,如下

{
	"id":"B0FFJ1X4TX","name":"\u8087\u5e86\u7ad9",
	"formatted_address":"\u4e2d\u56fd \u5e7f\u4e1c\u7701 \u8087\u5e86\u5e02 \u7aef\u5dde\u533a",
	"location":{"lat":23.081746,"lng":112.451073},
	"place_id":"a-B0FFJ1X4TX"
}

简单的解决方法:利用JSON在线解析(如:https://www.json.cn/)查看,选择取消保留转义

四、代码获取JSON数据

这里用的是volley框架,记得在项目中放入volley框架包(建议上百度查相关博客)

private RequestQueue requestQueue;

//volley框架,RequestQueue初始化
requestQueue= Volley.newRequestQueue(this);

//JSONLocationUrl="https://api.caiyunapp.com/v2/place?token={qwUMf5KJvTRtyInn}&lang=zh_CN&query=肇庆";
JsonObjectRequest jsonObjectRequest1 = new JsonObjectRequest(
                Request.Method.GET,//方式
                JSONLocationUrl,//网址
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.e("===",response.toString());
                        try {
                            //获取城市经纬度location.optString("lat"),location.optString("lng")
                            location=response.getJSONArray("places").getJSONObject(0).getJSONObject("location");
                            Log.e("===",location.toString());
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError arg0) {
                    }
                });
        /*
        */
        requestQueue.add(jsonObjectRequest1);
//运行结果为 Android中调试 中的第一张图

Android中调试

!! 善用Log.e()

	//JSONObject response
	Log.e("===",response.toString());
	//运行结果以及查看的方法如下:(一般在以下两个位置能找到)

图0

图1

Android中JSON解析以及使用

{
    "status":"ok",
    "api_version":"v2.5",
    "api_status":"active",
    "lang":"zh_CN",
    "unit":"metric",
    "tzshift":28800,
    "timezone":"Asia/Shanghai",
    "server_time":1654156762,
    "location":[
        23.081746,
        112.451073
    ],
    "result":{
        "realtime":{
            "status":"ok",
            "temperature":32,
            "humidity":0.71,
            "cloudrate":0.3,
            "skycon":"PARTLY_CLOUDY_DAY",
            "visibility":30,
            "dswrf":444.4,
            "wind":{
                "speed":19.01,
                "direction":168
            },
            "pressure":98987.64,
            "apparent_temperature":33.9,
            "precipitation":{
                "local":{
                    "status":"ok",
                    "datasource":"radar",
                    "intensity":0
                },
                "nearest":{
                    "status":"ok",
                    "distance":5.53,
                    "intensity":0.1875
                }
            },
            "air_quality":{
                "pm25":15,
                "pm10":25,
                "o3":76,
                "so2":9,
                "no2":3,
                "co":0.6,
                "aqi":{
                    "chn":26,
                    "usa":57
                },
                "description":{
                    "chn":"优",
                    "usa":"良"
                }
            },
            "life_index":{
                "ultraviolet":{
                    "index":5,
                    "desc":"中等"
                },
                "comfort":{
                    "index":0,
                    "desc":"闷热"
                }
            }
        },
        "primary":0
    }
}
/*翻译如下
{
    "status": "ok",
    "api_version":"v2.5",
    "api_status": "active",
    "lang": "zh_CN",
    "单位": "公制",
    "tzshift":28800,
    "时区": "亚洲/上海"。
    "server_time":1654156762,
    "位置":[
        23.081746,
        112.451073
    ],
    "结果":{
        "实时":{
            "状态": "OK"。
            "温度":32,
            "湿度":0.71,
            "cloudrate":0.3,
            "skycon": "PARTLY_CLOUDY_DAY",
            "能见度":30。
            "dswrf":444.4。
            "风":{
                "速度":19.01,
                "方向":168
            },
            "压力":98987.64,
            "表观温度":33.9,
            "降水":{
                "本地":{
                    "status": "ok",
                    "数据源": "雷达",
                    "强度":0
                },
                "最近的":{
                    "状态": "OK",
                    "距离":5.53。
                    "强度":0.1875
                }
            },
            "空气质量":{
                "pm25":15,
                "pm10":25,
                "o3":76,
                "so2":9,
                "no2":3,
                "co":0.6。
                "aqi":{
                    "CHN":26,
                    "美国":57
                },
                "描述":{
                    "CHN": "优"。
                    "美国": "良"
                }
            },
            "生命指数":{
                "紫外线":{
                    "index":5,
                    "desc": "中等"
                },
                "舒适度":{
                    "index":0,
                    "desc": "闷热"
                }
            }
        },
        "主要":0
    }
}
*/

善用github或码云!

在github或码云上能找到一些Android天气预报的项目作为参考

Android Studio导入项目的正确姿势

路径里含有中文,可能导致导入出错或无法识别

1.打开Android Studio软件,在软件的左上角我们找到file按钮,然后选择里面的Open…
2.然后我们在打开的窗口里面浏览到我们的项目,最好能够选择里面的build.gradle文件,然后点击ok,选择开启新窗口
3.再然后会弹出窗口,询问是否信任项目,选择信任后等待一段时间即可加载出完整的项目

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值