首页 > 其他分享 >Android 利用和风天气API显示实时天气

Android 利用和风天气API显示实时天气

时间:2022-11-19 23:45:32浏览次数:74  
标签:tv 天气 API Android now public view

最近开发遇到了这样的需求,需要在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 one rror(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)

标签:tv,天气,API,Android,now,public,view
From: https://www.cnblogs.com/soaring27221/p/16907540.html

相关文章

  • eclipse android快速搭建开发环境
    1.下载eclipse3.5以及以上ide和javaee工具​​​http://java.sun.com/javase/downloads/index.jsp​​​2下载AndroidSDK3.在eclipse下......
  • 遥控pc android应用程序
    遥控pcandroid应用程序 通过手机来控制您的电脑,在家里比如床上看电影,手机控制不用去直接操作电脑,多方便呀,呵呵。 分pc服务端程序,以及移动app应用程序。  1首先下载j......
  • android 一键锁屏
    android一键锁屏从操作上看,如果我们想锁屏休眠需要按手机上固定的按钮,现在通过桌面应用,只要将此应用图标放到桌面上点击一下即可锁屏休眠。从体......
  • JKD8新的时间API
     packageA_ShangGuiGu.DateTimeTest;importorg.junit.Test;importjava.time.LocalDate;importjava.time.LocalDateTime;importjava.time.LocalTime;publicclassJ......
  • Android 使用ui控件 【文本显示控件,按钮控件】
    目录注意事项创建控件监控按钮按下修改文本展示控件的内容注意事项1创建控件后一定要设置控件id2控件的修改必须在主线程中创建控件在清单文件中创建控件,我是通过可......
  • 全面解析Android之ANR日志
    不论从事安卓应用开发,还是安卓系统研发,应该都遇到应用无响应(简称ANR)问题,当应用程序一段时间无法及时响应,则会弹出ANR对话框,让用户选择继续等待,还是强制关闭。本文将带你......
  • web开发模式和API接口
    1.web开发模式1前后端混合开发---前后端不分离返回html内容2.前后端分离#专注写json格式的数据xml页面静态化API接口......
  • LyScriptTools 扩展Script类API手册
    纯脚本类的功能实现都是调用的x64dbg命令,目前由于run_command_exec()命令无法返回参数,故通过中转eax寄存器实现了取值,目前只能取出整数类型的参数。Script类内函数名......
  • 03#Android 基础:Fragment
    Fragment概念官方文档定义:Fragment表示应用界面中可重复使用的一部分。Fragment定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。Fragment不能独......
  • Android studio 下载安装配置教程
    目录下载Androidstudio下载Androidstudio指定了版本Androidstudio4.1.2下载链接,输入网址即可自动下载https://redirector.gvt1.com/edgedl/android/studio/install......