【Android开发之和风天气篇(1、获取天气信息)】TIME:2020年7月6日
:1、获取天气信息
- 和风天气API使用方法:
- step1 申请天气接口
- step2 天气接口初始化
- step3 选择服务模式
- step4 通过URL请求数据
- step5解析JSON数据
- 附上源码:
和风天气API使用方法:
1、申请天气接口step1 申请天气接口 天气接口申请
2、天气接口账号初始化
3、选择服务模式,免费还是商业版
4、通过URL请求数据(get和post方式)并接收数据
5、解析JSON数据
step2 天气接口初始化
HeConfig.init(publicId,key);
step3 选择服务模式
//切换到免费服务模式
HeConfig.switchToFreeServerNode();
step4 通过URL请求数据
private void queryWeather() {
new Thread() {
@Override
public void run() {
String param = "key=07a717828d9f49169062e88e66d50697&location=auto_ip";
StringBuilder sb = new StringBuilder();
InputStream is = null;
BufferedReader br = null;
PrintWriter out = null;
try {
String url ="https://free-api.heweather.net/s6/weather";
URL uri = new URL(url);
HttpURLConnection connection = (HttpURLConnection) uri.openConnection();
//开启一个url的连接,用HttpURLConnection连接方式处理
connection.setRequestMethod("POST");
//设置连接对象的请求数据的方式
connection.setConnectTimeout(3000);
//设置连接对象的请求超时的时间
connection.setReadTimeout(5000);
//设置读超时
connection.setRequestProperty("accept", "*/*");
//发送参数
connection.setDoOutput(true);
out = new PrintWriter(connection.getOutputStream());
out.print(param);
Log.e("param",param);
out.flush();
//接收结果
is = connection.getInputStream();
br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
//缓冲逐行读取
String line;
while ( ( line = br.readLine() ) != null ) {
sb.append(line);
}
queryWeather2();
Log.e("success","tmp:" + sb.toString());
} catch (Exception ignored) {
} finally {
//关闭流
try {
if(is!=null){
is.close();
}
if(br!=null){
br.close();
}
if (out!=null){
out.close();
}
} catch ( Exception ignored ) {}
}
}
}.start();
}
step5解析JSON数据 以实况天气为例
public void queryWeather2() {
/**
* 实况天气
* 实况天气即为当前时间点的天气状况以及温湿风压等气象指数,具体包含的数据:体感温度、
* 实测温度、天气状况、风力、风速、风向、相对湿度、大气压强、降水量、能见度等。
*
* @param context上下文
* @param location 地址详解
* @param lang多语言,默认为简体中文,海外城市默认为英文
* @param unit单位选择,公制(m)或英制(i),默认为公制单位
* @param listener 网络访问回调接口
*/
HeWeather.getWeatherNow(Weather.this, "CN101080101",Lang.CHINESE_SIMPLIFIED, Unit.METRIC, new HeWeather.OnResultWeatherNowBeanListener() {
@Override
public void onError(Throwable e) {
Log.i(TAG, "Weather Now onError: ", e);
}@Override
public void onSuccess(Now dataObject) {
Log.i(TAG, " Weather Now onSuccess: " + new Gson().toJson(dataObject));
//先判断返回的status是否正确,当status正确时获取数据,若status不正确,可查看status对应的Code值找到原因
if (Code.OK.getCode().equalsIgnoreCase(dataObject.getStatus())) {
//此时返回数据Basic basic = dataObject.getBasic();
String location = basic.getLocation();
NowBase now = dataObject.getNow();
String tmp = now.getTmp();
Intent intent = new Intent();
intent.putExtra("tmp", tmp);
intent.setAction("number_tmp");
sendBroadcast(intent);
} else {
//在此查看返回数据失败的原因
String status = dataObject.getStatus();
Code code = Code.toEnum(status);
Log.i(TAG, "failed code: " + code);
}
}
});
}
附上源码: 下载地址
推荐阅读
- 从零开发一个完整的Android项目(九)——图片浏览
- Android开发|ViewPager自适应高度问题
- Android|Android 指定销毁一个Activity
- 【Android】简单图片浏览器
- 理解ButterKnife(自动生成绑定资源的代码)
- MAC下搭建Android Studio
- NestedScrollingParent 和NestedScrollingChild 实现嵌套滑动
- android用shape画一条横线
- 华为推送 的坑
- Duplicate class com.alipay.a.a.a found in modules classes.jar (:alipaySdk-15.6.2-20190416165036:) an