最近开发遇到了这样的需求,需要在APP中显示出实时天气等信息,可以利用和风天气提供的API,免费订阅可以使用一定数量的查询额度,不过也差不多够用了。

进入和风天气官网,注册。

控制台 | 和风天气 (qweather.com)

点击新建项目

选择免费订阅,项目名称随便填吧,适用平台选择Android SDK,key的名称起一个,比如起了个zzuwindelves

绑定packagename时,复制androidManifest.xml里的包名粘上去

这个com.example.xxxx就是包名了

回到项目管理,可以看到public id与key

然后去下载和风天气的android SDK,详见官方文档

Android SDK配置 | 和风天气开发服务 (qweather.com)

 修改AndroidManifest.xml,将联网权限打开

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.windelves">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--省略其他代码-->

修改java文件,这里我是直接在Fragment里写的

OnCreateView里的主要代码

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view=inflater.inflate(R.layout.fragment_monitor, container, false);

        //getPosition(view);
        HeConfig.init("【public id】", "【key】");//将上边创建项目后的id和key复制进去
        HeConfig.switchToDevService();
        setTempAndHumidity(view);//刚才上边那个函数
        //其他无关代码省略
        return view;
}

public void setTempAndHumidity(View view){
        //location:查询的地区,可通过该地区ID、经纬度进行查询经纬度格式,这里以郑州为例,郑州的城市编号为"CN101180101"
        QWeather.getWeatherNow(getActivity(), "CN101180101", Lang.ZH_HANS, Unit.METRIC, new QWeather.OnResultWeatherNowListener(){
            public static final String TAG="he_feng_now";
            @Override
            public void onError(Throwable e) {
                Log.i(TAG, "onError: ", e);
                System.out.println("获取天气失败");
                System.out.println("Weather Now Error:"+new Gson());
            }
            @Override
            public void onSuccess(WeatherNowBean weatherBean){
                //Log.i(TAG, "getWeather onSuccess: " + new Gson().toJson(weatherBean));
                System.out.println("获取天气成功: " + new Gson().toJson(weatherBean));
                //先判断返回的status是否正确,当status正确时获取数据,若status不正确,可查看status对应的Code值找到原因

                if (Code.OK == weatherBean.getCode()) {
                    WeatherNowBean.NowBaseBean now = weatherBean.getNow();
                    System.out.println(now);
                    String tianqi=now.getText();//天气
                    String wendu=now.getTemp()+"℃";//温度
                    String fengli=now.getWindScale();//风力
                    String fengxiang=now.getWindDir();//风向
                    String shidu=now.getHumidity()+"%";//湿度


                    getActivity().runOnUiThread(new Runnable() {
                        public void run() {
                            tv_tianqi=view.findViewById(R.id.tv_tianqi);
                            tv_wendu=view.findViewById(R.id.tv_wendu);
                            tv_shidu=view.findViewById(R.id.tv_shidu);
                            
                            tv_tianqi.setText(tianqi);//显示当前天气
                            tv_wendu.setText(wendu);//显示当前温度
                            tv_shidu.setText(shidu);//显示当前湿度
                        }
                    });
                    /*注意这里对控件显示的操作被放在getActivity()...void run(){}里了
                    这是因为我是在Fragment里操作的,如果把这些放在外边会抛出错误
                    在Activity中时可以把这些放在外边,不用带什么runOnUi...
                    参考了https://blog.csdn.net/i_nclude/article/details/105563688*/
                    
                }
                else {
                    //在此查看返回数据失败的原因
                    Code code = weatherBean.getCode();
                    System.out.println("失败代码: " + code);
                    //Log.i(TAG, "failed code: " + code);
                }
            }
        });
    }

 参照官方文档实时天气 for Android | 和风天气开发服务 (qweather.com)

可以看出能够显示的信息还挺多的,风力风速啥的乱七八糟的都有。

运行效果

关于城市编号,中国天气网城市代码-pudn.com

end(此篇主要还是备忘之用,可能有疏漏的地方)

参考文章

android studio json数据解析汇总(备忘)_kim5659的博客-CSDN博客

andriod 和风天气SDK获取实时天气(保姆级教程)_kim5659的博客-CSDN博客

解决Only the original thread that created a view hierarchy can touch its views_菜鸟码农阿庆的博客-CSDN博客

Android框架Volley使用之Json请求实现_Android_脚本之家 (jb51.net)

原文地址:http://www.cnblogs.com/soaring27221/p/16907540.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性