Android和风天气sdk

说明(遇到的坑)

在写这篇博客之前遇到了很多问题,出现问题的原因:

1. 没有认真参考说明文档
2. 没有认真查看最新和风天气sdk实况天气json数据格式内容
3. 没有认真考虑过对应包名与对应key值关系(开发者在使用对应包名com.example.tobey_r1下的测试key时如果是使用免费节点则只能测试)
这里也要特殊解释一下:如果你在和风天气控制台中创建了两个应用A和B对应包名com.example.A和com.example.B,如果你用A的测试username与key去在应用b中开发使用就会报:{"status":"bad bind"}我们查看和风天气错误码(ps最新的参照表):
在这里插入图片描述
我们会发现就会发现这个提示(毕竟你使用的是天气数据免费版)像我就升级了一个(emm,比较请求1000次才8毛用的计量计费模式)使用天气数据商业版唯一的好处就是免费版有总次数限制以及添加其他功能(关于免费版和商业版他的节点不一样,代码要改动一丢丢,下面会说)注意免费版使用免费节点,商业版使用商业节点不然后报无访问权限
如图:在这里插入图片描述
在这里插入图片描述
4.开发者注册的日期坑(2018年之前的与之后因为版本更新使用了s6版本,使我们学习前辈写的和风请求实况会报未知错误或是无访问权限究其原因还是json数据格式发生变化啦)如下:

老版和风json格式( Sdk v2.0以内,具体的我也不太清楚)

 [{"now":{"fl":"31","tmp":"28","cond_code":"101","cond_txt":"多云","hum":"74","pcpn":"0.0","pres":"1013","vis":"16","cloud":"91","wind_deg":"83","wind_dir":"东风","wind_sc":"2","wind_spd":"7"},"basic":{"cid":"CN101190105","location":"六合","parent_city":"南京","admin_area":"江苏","cnty":"中国","lat":"32.34065628","lon":"118.85064697","tz":"+8.00"},"status":"ok","update":{"loc":"2019-09-12 11:21","utc":"2019-09-12 03:21"}}]

新版和风json格式(Sdk v3.0+)

{"now":{"cloud":"91","cond_code":"101","cond_txt":"多云","fl":"32","hum":"80","pcpn":"0.0","pres":"1010","tmp":"29","vis":"9","wind_deg":"89","wind_dir":"东风","wind_sc":"2","wind_spd":"11"},"basic":{"admin_area":"江苏","cid":"CN101190101","cnty":"中国","lat":"32.04154587","location":"南京","lon":"118.76741028","parent_city":"南京","tz":"+8.00"},"status":"ok","update":{"loc":"2019-09-12 11:33","utc":"2019-09-12 03:33"}}

如果你是2018年以后注册的开发者则会因为解析原因等即使按照前辈们写的依然会出现未知错误。(最简单的办法嘛就是使用最新的和风sdk咯)

效果图

在这里插入图片描述

实现过程

好啦,基本注意的点都说啦,如果还是有不明白的可以评论问我哦,基本白天都在的

第一步,注册账号(2018年以后的开发者,如果是以前的想知道如何获取实况天气也可以私我)

打开和风天气网页,点击注册,然后进入控制台:
新建一个应用(当然名字取自几喜欢的):
在这里插入图片描述
点击添加key:在这里插入图片描述
这里包名就是我们项目的包名
在这里插入图片描述
添加后如下图所示:
在这里插入图片描述
我们现在就可以在项目中注册使用啦(要在包名是com.example.wheather即你刚刚设置的包名的那个项目中使用

第二步 添加引用

和风天气里下载androidSDK如下图:
在这里插入图片描述
下载完以后,将jar包复制到l项目的 libs文件夹内,然后右键选择Add asLibrary在这里插入图片描述
修改项目的build.gradle添加如下:

implementation 'com.squareup.okhttp3:okhttp:3.9.0'
implementation 'com.google.code.gson:gson:2.6.2'
//下面这个是你上面add as library时自动添加的
implementation files('libs/HeWeather_Public_Android_V3.1 .jar')

第三步 修改activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFF"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv_tianqi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000"
        />
    <TextView
        android:id="@+id/tv_kongqi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000"
        />
    <TextView
        android:id="@+id/tv_airqlty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000"
       />

</LinearLayout>

第四步 修改MainActivity.java

package com.example.weathertest;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.google.gson.Gson;
import org.json.JSONException;
import org.json.JSONObject;
import interfaces.heweather.com.interfacesmodule.bean.Lang;
import interfaces.heweather.com.interfacesmodule.bean.Unit;
import interfaces.heweather.com.interfacesmodule.bean.air.now.AirNow;
import interfaces.heweather.com.interfacesmodule.bean.weather.now.Now;
import interfaces.heweather.com.interfacesmodule.view.HeConfig;
import interfaces.heweather.com.interfacesmodule.view.HeWeather;

public class MainActivity extends AppCompatActivity {
    String TAG="MainActivity";
    TextViewtv_tianqi,tv_kongqi,tv_airqlty;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //username,key要替换成你自己的哦
        HeConfig.init("HE1909121339201612","083fbdf0edca4082813382b9551043e9");   
        HeConfig.switchToFreeServerNode();   
        tv_tianqi =(TextView) findViewById(R.id.tv_tianqi);
        tv_kongqi =(TextView) findViewById(R.id.tv_kongqi);
        tv_airqlty =(TextView) findViewById(R.id.tv_airqlty);
    }

    @Override
    protected void onStart() {
        super.onStart();
        getWether(); 
    }

    private void getWether() {
        /**
         * 实况天气
         * 实况天气即为当前时间点的天气状况以及温湿风压等气象指数,具体包含的数据:体感温度、
         * 实测温度、天气状况、风力、风速、风向、相对湿度、大气压强、降水量、能见度等。
         * @param context  上下文
         * @param location 地址详解
         * @param lang       多语言,默认为简体中文
         * @param unit        单位选择,公制(m)或英制(i),默认为公制单位
         * @param listener  网络访问回调接口
         */
        HeWeather.getWeatherNow(MainActivity.this, "CN101190101",  Lang.CHINESE_SIMPLIFIED , Unit.METRIC , new HeWeather.OnResultWeatherNowBeanListener() {
            public static final String TAG="he_feng_now";
            @Override
            public void onError(Throwable e) {
                Log.i(TAG, "onError: ", e);
                System.out.println("Weather Now Error:"+new Gson());
            }

            @Override
            public void onSuccess(Now dataObject) {
                Log.i(TAG, " Weather Now onSuccess: " + new Gson().toJson(dataObject));
                String jsonData = new Gson().toJson(dataObject);          
                String tianqi = null,wendu = null, tianqicode = null;
                if (dataObject.getStatus().equals("ok")){
                    String JsonNow = new Gson().toJson(dataObject.getNow());
                    JSONObject jsonObject = null;
                    try {
                        jsonObject = new JSONObject(JsonNow);
                        tianqi = jsonObject.getString("cond_txt");
                        wendu = jsonObject.getString("tmp");              
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }else {
                    Toast.makeText(MainActivity.this,"有错误",Toast.LENGTH_SHORT).show();
                    return;
                }
                String wendu2 = wendu +"℃";
                tv_tianqi.setText("当前天气:"+tianqi);
                tv_kongqi.setText("当前温度:"+wendu2);         
            }
        });
        HeWeather.getAirNow(MainActivity.this, "CN101190101", Lang.CHINESE_SIMPLIFIED, Unit.METRIC, new HeWeather.OnResultAirNowBeansListener() {
           public static final String TAG2="he_feng_air";
            @Override
            public void onError(Throwable throwable) {
                Log.i(TAG2,"ERROR IS:",throwable);
            }
            @Override
            public void onSuccess(AirNow airNow) {
                Log.i(TAG2,"Air Now onSuccess:"+new Gson().toJson(airNow));
                String airStatus = airNow.getStatus();
                if (airStatus.equals("ok")){
                    String jsonData = new Gson().toJson(airNow.getAir_now_city());
                    String aqi = null,qlty = null;
                    JSONObject objectAir = null;
                    try {
                        objectAir = new JSONObject(jsonData);
                        aqi = objectAir.getString("aqi");
                        qlty = objectAir.getString("qlty");
                        tv_airqlty.setText("天气状况:"+qlty+" "+"空气质量:"+"("+aqi+")");
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }else {
                    Toast.makeText(MainActivity.this,"有错误",Toast.LENGTH_SHORT).show();
                    return;
                }
            }
        });
    }
}
如果你觉得还不错的话,请点个赞哦,有问题欢迎指正!
后面将会学习如何获取天气图片以及使用Butterknife。
  • 12
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪の星空朝酱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值