上一章基本实现了控件的滑动效果,那么其中的数据是怎么获取的呢~
我使用的是阿里云天气预报api,使用阿里云提供的API,需要遵循以下几步:
1. 百度搜索阿里云免费天气预报API,进入阿里云云市场。

2. 这个API是免费版的,只要不是商业开发,应该可以满足我们的需求。有了API,第一步应该看的是这个API的请求方式,返回的数据格式,以及最重要的是可以请求到多少数据,比如一定要有天气质量,未来几日天气等等。下面这张图就可以看到所有你想知道的。这也是阿里云自己提供的,请求方式为get,返回类型为json,左侧还可以选择你想获取哪些类型的天气信息。这里我选的是id或地名查询7天预报。

3. 再往下拉你会发现阿里云还把每种语言下具体的请求方式示例全都列举了出来,良心网站啊!!不过我在使用它提供的示例时出现了一些问题,不知道大家会不会遇到,那么我就来说说我具体是怎么获取的吧~
1)首先,将Java请求示例中的代码拷贝下来,这里我稍微做了一下更改,因此我在使用时出现了一些问题,更改之后的是完全可以正常获取的。

final String host = "http://ali-weather.showapi.com";final String path = "/area-to-weather";final String method = "GET";String appcode = "c402356e77824e7d8a23eebf6cf6d0b5";final Map<String, String> headers = new HashMap<>();final Map<String, String> querys = new HashMap<>();headers.put("Authorization", "APPCODE " + appcode);querys.put("area", "济南");querys.put("need3HourForcast", "0");querys.put("needAlarm", "0");querys.put("needHourData", "1");querys.put("needIndex", "1");querys.put("needMoreDay", "1");String content = "";HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "utf-8"));for (String s = reader.readLine(); s != null; s = reader.readLine()) {content += s;}

2)拷贝完这写代码,你会发现很多地方全都报红,哇是不是很兴奋。首先,先按照示例的要求去下载HttpUtils类,放到项目中。

/*** Created by zhaoxin on 17/9/15.*/public class HttpUtils {/*** get** @param host* @param path* @param method* @param headers* @param querys* @return* @throws Exception*/public static HttpResponse doGet(String host, String path, String method,Map<String, String> headers,Map<String, String> querys)throws Exception {HttpClient httpClient = wrapClient(host);HttpGet request = new HttpGet(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}return httpClient.execute(request);}/*** post form** @param host* @param path* @param method* @param headers* @param querys* @param bodys* @return* @throws Exception*/public static HttpResponse doPost(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,Map<String, String> bodys)throws Exception {HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (bodys != null) {List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();for (String key : bodys.keySet()) {nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));}UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");request.setEntity(formEntity);}return httpClient.execute(request);}/*** Post String** @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPost(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,String body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (StringUtils.isNotBlank(body)) {request.setEntity(new StringEntity(body, "utf-8"));}return httpClient.execute(request);}/*** Post stream** @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPost(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,byte[] body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (body != null) {request.setEntity(new ByteArrayEntity(body));}return httpClient.execute(request);}/*** Put String** @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPut(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,String body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPut request = new HttpPut(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (StringUtils.isNotBlank(body)) {request.setEntity(new StringEntity(body, "utf-8"));}return httpClient.execute(request);}/*** Put stream** @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPut(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,byte[] body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPut request = new HttpPut(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (body != null) {request.setEntity(new ByteArrayEntity(body));}return httpClient.execute(request);}/*** Delete** @param host* @param path* @param method* @param headers* @param querys* @return* @throws Exception*/public static HttpResponse doDelete(String host, String path, String method,Map<String, String> headers,Map<String, String> querys)throws Exception {HttpClient httpClient = wrapClient(host);HttpDelete request = new HttpDelete(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}return httpClient.execute(request);}private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {StringBuilder sbUrl = new StringBuilder();sbUrl.append(host);if (!StringUtils.isBlank(path)) {sbUrl.append(path);}if (null != querys) {StringBuilder sbQuery = new StringBuilder();for (Map.Entry<String, String> query : querys.entrySet()) {if (0 < sbQuery.length()) {sbQuery.append("&");}if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {sbQuery.append(query.getValue());}if (!StringUtils.isBlank(query.getKey())) {sbQuery.append(query.getKey());if (!StringUtils.isBlank(query.getValue())) {sbQuery.append("=");sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));}}}if (0 < sbQuery.length()) {sbUrl.append("?").append(sbQuery);}}return sbUrl.toString();}private static HttpClient wrapClient(String host) {HttpClient httpClient = new DefaultHttpClient();if (host.startsWith("https://")) {sslClient(httpClient);}return httpClient;}private static void sslClient(HttpClient httpClient) {try {SSLContext ctx = SSLContext.getInstance("TLS");X509TrustManager tm = new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() {return null;}public void checkClientTrusted(X509Certificate[] xcs, String str) {}public void checkServerTrusted(X509Certificate[] xcs, String str) {}};ctx.init(null, new TrustManager[]{tm}, null);
//            SSLSocketFactory ssf = new SSLSocketFactory(ctx);
//            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
//            ClientConnectionManager ccm = httpClient.getConnectionManager();
//            SchemeRegistry registry = ccm.getSchemeRegistry();
//            registry.register(new Scheme("https", 443, ssf));} catch (KeyManagementException ex) {throw new RuntimeException(ex);} catch (NoSuchAlgorithmException ex) {throw new RuntimeException(ex);}}}

3)这个时候,你会发现更多地方开始报红了,哇是不是又开始兴奋了。那么我们怎么一步步的修复呢~
首先,先把我上面注释的东西给注释了
然后,导包,因为HttpClient现在已经被丢弃了,如果我们还想使用它,那么必须手动导包。这些jar包我该怎么给你们。。。。。(等我后续研究研究)

导包步骤:
1.在project中,将jar包放入lib文件中,然后全部选中右键add as library.

4)到现在为止,应该不报红了吧,不过,要不你运行一下试试呗,是不是又出现了一些小问题。现在,你只需要将下面这段代码放入build.gradle中,然后重新make project就可以了。

在对应的“module文件.gradle”中写入
android{.......packagingOptions {exclude 'META-INF/DEPENDENCIES.txt'exclude 'META-INF/LICENSE.txt'exclude 'META-INF/NOTICE.txt'exclude 'META-INF/NOTICE'exclude 'META-INF/LICENSE'exclude 'META-INF/DEPENDENCIES'exclude 'META-INF/notice.txt'exclude 'META-INF/license.txt'exclude 'META-INF/dependencies.txt'exclude 'META-INF/LGPL2.1'}....
} 

至此,阿里云的天气预报信息就可以获取到了,如果你想查看当前获取的内容,打印一下content就可以了

Log.d("data_",content);

打印结果如下:

Android 端天气预报APP的实现(二)阿里云天气预报API的获取相关推荐

  1. react native Android端保持APP后台运行--封装 Headless JS

    react native Android端保持APP后台运行--封装 Headless JS 前些日子在做后台下载时踩了后台运行这个大坑,RN官网文档上面在安卓上提供了Headless JS方法,iO ...

  2. 搭建直播平台过程中Android端直播APP源码是如何实现连麦功能的?

    直播平台强大的变现能力是大家有目共睹的,很多开发商在搭建直播平台时为了增加用户黏性,纷纷将直播中加入连麦功能. 目前市场上通用的有两种连麦方案:本地混流和云端混流.本地混流即主播和连麦观众分别推一路流 ...

  3. 免费下载|《云原生时代下的App开发》走进阿里云一站式应用研发平台EMAS

    作为国内移动互联网.云计算领域的行业巨擘,阿里巴巴在大前端.云原生领域有着丰富的实战经验.阿里技术人从2016年开始逐步将阿里集团内部成熟的应用中间件云化输出,并在2018年推出了移动研发平台EMAS ...

  4. Android平台上实现身份证识别(通过阿里云Api-印刷文字识别_身份证识别)

    Android平台上实现身份证识别(通过阿里云Api-印刷文字识别_身份证识别) 一: 前言 继上一篇文章有段时间了,上一篇文章的身份证和银行卡的识别时通过本地的opencv库,tess-two库识别 ...

  5. Android平台上实现银行卡识别(通过阿里云Api-印刷文字识别_银行卡识别)

    Android平台上实现银行卡识别(通过阿里云Api-印刷文字识别_银行卡识别) 一: 前言 上一篇文章是通过阿里云Api实现在android中扫描身份证和从相册中选取身份证图片识别身份证信息的功能, ...

  6. 政府安全资讯精选 2017年第十八期 工信部近三年将466个“问题APP”纳入黑名单;阿里云成为全球唯一完成德国C5云安全基础附加标准审计云服务商...

    摘要: 工信部近三年将466个"问题APP"纳入黑名单:阿里云成为全球唯一完成德国C5云安全基础附加标准审计云服务商:新加坡政府首开漏洞奖励计划,邀"白帽子"渗 ...

  7. 阿里云域名优惠口令获取方法

    2022年阿里云域名优惠口令获取方法,在阿里云进行域名注册或域名续费操作时,可以看到有"使用优惠口令",然后输入相应后缀域名的口令即可享受一定的折扣优惠.如.com域名每年续费需要 ...

  8. 微信小程序使用阿里云物联网API开发物联网应用

    微信小程序是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或者搜一下就可以打开的应用. 微信小程序具有方便快捷,速度快,安全及保密性高的优点,同时开发 ...

  9. ■ 直接调用阿里云视频点播API实现视频播放

    前言:公司最近要实现一个视频播放的功能,正常是不需要移动端调用阿里云视频API的,这件事是由后台来完成的.但是既然需求交给我了,就要想办法完成. 先来看一眼官方的API调用文档 https://hel ...

  10. 基于阿里云的API简介

    基于阿里云的API简介 API简介 如果您熟悉网络服务协议和一种以上编程语言,推荐您调用API管理您的云上资源和开发自己的应用程序. 使用说明 ECS API支持HTTP或者HTTPS网络请求协议,允 ...

最新文章

  1. 高中数学?_JAVA
  2. 7/100. Move Zeroes
  3. 正确退出activity_如何退出Activity
  4. vue项目示例代码git_您应该了解的5个Git命令以及代码示例
  5. java 计算反码_java基础知识-原码、反码、补码、运算符
  6. android广播代码汇总一__无序广播
  7. NDArray基础语法知识(与Numpy的对比)
  8. UVa 548 Tree(中序遍历+后序遍历)
  9. java 哈希表入门
  10. python列表推导式使用
  11. 手机和电脑如何快速传大文件
  12. (休息几天)读米什金之货币银行学——金融市场工具
  13. 制作PE系统--20220202
  14. pythontrun什么意思_python 新手笔记一
  15. 《元宇宙十大技术》感谢乔卫兵等6位为出版做出巨大贡献
  16. 模板匹配 解决模板旋转以及重复检测问题
  17. CleanMyMac X真正好用的Mac电脑系统优化软件应用工具
  18. Centos篇-Centos Minimal安装
  19. 看电影学英语最时尚法则:“加减乘除”
  20. java开源验证框架OVAL帮助文档

热门文章

  1. Linux字体库ttc还是ttf,几种操作系统字体格式:otf/ttf/ttc格式字体的区别
  2. tarjan算法 转载
  3. 神经网络入门之bp算法,梯度下降
  4. MATLAB与SPSS接口
  5. 调研我国在需求分析方法、工具方面所做出的成果
  6. JAVA导入gpx文件_用于Java的GPX解析器?[关闭]
  7. pdf、epub、mobi、三种下载方式区别
  8. PS替换证件照背景颜色
  9. 转载“用USBOOT制作DOS启动盘”
  10. 激活Navicat premium12时出现“Rsa public key not find“报错时的解决方法