使用GSON获取天气预报信息

Android MVP实战——环境云API+Android实现天气预报查询(下) 在Android MVP实战——环境云API+Android实现天气预报查询(上)中,我们已经完成了基本的准备工作。接下来我们就将具体去实现业务逻辑。在本节中,将会涉及到volley以及gson的基本使用,如果有不会的小伙伴建议提前学习一下。 阅读详情

gson可能大部分程序员都不熟悉,简言之就是一个json工具,可实现对象和json字符串之间的转换;有人可能会说了用json-lib就可以了啊,之前我也是用json-lib的但是总是觉得很麻烦,生成json还OK但是解析就要费九牛二虎之力了,权衡之下还是选择使用gson.这次就使用gson配合百度API来实现天气预报的查询功能。


一  gson的下载地址


Gson是Google提供的用于在Java对象和JSON字符串之间进行转换的Java类库。


下载地址1:https://code.google.com/p/google-gson/downloads/list
下载地址2:http://download.youkuaiyun.com/detail/lyq8479/8451103


二  代码实现

1 先来体验下gson的简单使用

先搞个pojo类:

package org.lxh;

public class UserInfo {
	private String name;
	private String address;
	private String email;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
}

接下来直接上测试类:

package org.lxh;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

public class UseGson {
  public static void main(String args[]){
	  
	  UserInfo u1=new UserInfo();
	  u1.setAddress("上海浦东新区");
	  u1.setEmail("chen@163.com");
	  u1.setName("王大锤");
	  
	  Gson gson=new Gson();
	  String jsonStr=gson.toJson(u1);
	  
	  System.out.println(jsonStr);
	 
	  
	  UserInfo u2=new UserInfo();
	  u2.setAddress("安徽芜湖");
	  u2.setEmail("chen@163.com");
	  u2.setName("蜡笔小新");
	  
	  List<UserInfo> all=new ArrayList<UserInfo>();
	  all.add(u1);
	  all.add(u2);
	  
	  String jsonArrStr=gson.toJson(all);
	  
	  System.out.println("------------------生成json数组-------------------");
	  System.out.println(jsonArrStr);
	  System.out.println("------------------把JSON转成对象-------------------");
	  List<UserInfo> obj=gson.fromJson(jsonArrStr, new TypeToken<List<UserInfo>>(){}.getType());
	  System.out.println(obj.get(0).getAddress());
	  
  }
}

来看下运行效果:



2  封装天气预报工具类

百度API地址:http://developer.baidu.com/map/index.php?title=car/api/weather

使用之前要先注册个开发者账号,之后创建应用就能得到ak了,这些操作就自己搞了,你们都懂的。


(1)封装WeatherData类

 

package org.lxh;

public class WeatherData {
	private String date;
	private String weather;
	private String dayPictureUrl;
	private String nightPictureUrl;
	private String wind;
	private String temperature;

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public String getDayPictureUrl() {
		return dayPictureUrl;
	}

	public void setDayPictureUrl(String dayPictureUrl) {
		this.dayPictureUrl = dayPictureUrl;
	}

	public String getNightPictureUrl() {
		return nightPictureUrl;
	}

	public void setNightPictureUrl(String nightPictureUrl) {
		this.nightPictureUrl = nightPictureUrl;
	}

	public String getWind() {
		return wind;
	}

	public void setWind(String wind) {
		this.wind = wind;
	}

	public String getTemperature() {
		return temperature;
	}

	public void setTemperature(String temperature) {
		this.temperature = temperature;
	}

	public String getWeather() {
		return weather;
	}

	public void setWeather(String weather) {
		this.weather = weather;
	}
}

(2)封装WeatherResult

package org.lxh;

import java.util.List;

public class WeatherResult {
	private String currentCity;
	private String pm25;
	private List<WeatherData> weather_data;

	public String getCurrentCity() {
		return currentCity;
	}

	public void setCurrentCity(String currentCity) {
		this.currentCity = currentCity;
	}

	public String getPm25() {
		return pm25;
	}

	public void setPm25(String pm25) {
		this.pm25 = pm25;
	}

	public List<WeatherData> getWeather_data() {
		return weather_data;
	}

	public void setWeather_data(List<WeatherData> weatherData) {
		weather_data = weatherData;
	}
}


(3)封装WeatherResp

 

package org.lxh;

import java.util.List;

public class WeatherResp {
	private int error;
	private String status;
	private String date;
	private List<WeatherResult> results;

	public int getError() {
		return error;
	}

	public void setError(int error) {
		this.error = error;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getDate() {
		return date;
	}

	public void setDate(String date) {
		this.date = date;
	}

	public List<WeatherResult> getResults() {
		return results;
	}

	public void setResults(List<WeatherResult> results) {
		this.results = results;
	}
}

(4)HttpURLConnection操作工具类

package org.lxh;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ConnectException;
import java.net.HttpURLConnection;
import java.net.URL;



public class CommonUtil {
	  public static String httpRequest(String requestUrl, String requestMethod, String outputStr) {  
	       
	        StringBuffer buffer = new StringBuffer();  
	        try {  
	 
	            URL url = new URL(requestUrl);  
	            HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
	            httpUrlConn.setDoOutput(true);  
	            httpUrlConn.setDoInput(true);  
	            httpUrlConn.setUseCaches(false);  
	            // 设置请求方式(GET/POST)  
	            httpUrlConn.setRequestMethod(requestMethod);  
	            httpUrlConn.connect();  
	           
	            // 当有数据需要提交时  
	            if (null != outputStr) {  
	                OutputStream outputStream = httpUrlConn.getOutputStream();  
	                // 注意编码格式,防止中文乱码  
	                outputStream.write(outputStr.getBytes("UTF-8"));  
	                outputStream.close();  
	            }  
	  
	            // 将返回的输入流转换成字符串  
	            InputStream inputStream = httpUrlConn.getInputStream();  
	            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
	            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
	  
	            String str = null;  
	            while ((str = bufferedReader.readLine()) != null) {  
	                buffer.append(str);  
	            }  
	            bufferedReader.close();  
	            inputStreamReader.close();  
	            // 释放资源  
	            inputStream.close();  
	            inputStream = null;  
	           
	        } catch (ConnectException ce) {  
	        	ce.printStackTrace();
	          
	        } catch (Exception e) {  
	          
	        	e.printStackTrace();
	        }  
	        return buffer.toString();  
	    }  
}

(5)天气预报获取工具类

package org.lxh;

import java.net.URLEncoder;
import java.util.Iterator;
import java.util.List;

import com.google.gson.Gson;

public class WeatherUtil {
   public static String getWeatherResult(String cityName) throws Exception{
	   
	   String requestUrl="http://api.map.baidu.com/telematics/v3/weather?location={LOCATION}&output=json&ak={KEY}";
	   String requestWeatherUrl=requestUrl.replace("{LOCATION}", URLEncoder.encode(cityName, "UTF-8")).replace("{KEY}", "你的AK");
	   
	   String result=CommonUtil.httpRequest(requestWeatherUrl, "POST", null);
	   //System.out.println(result);
	   Gson gson=new Gson();
	   WeatherResp wresp=gson.fromJson(result, WeatherResp.class);
	   
	   StringBuffer buf=new StringBuffer();
	   buf.append(cityName+"天气预报"+"\n\n");
	   
	   List<WeatherData> wdata=wresp.getResults().get(0).getWeather_data();
	   Iterator<WeatherData> it=wdata.iterator();
	   while(it.hasNext()){
		   WeatherData w=it.next();
		   buf.append(w.getDate()+","+w.getWeather()+","+w.getTemperature()+","+w.getWind());
		   buf.append("\n\n");
	   }
	   return buf.toString();
   }
   
   public static void main(String args[]) throws Exception{
	   System.out.println(getWeatherResult("苏州"));
   }
}

来看下运行效果截图:



天气预报的接口来源还是挺多的,数据交互方式也不尽相同,选择合适的就行,不一定局限于百度的API.gson的使用关键在于json数据的分析,按结构提取出合适的pojo类能很好的降低解析难度。

Android Studio实现天气预报小程序 Android-studio编写一个简单天气预报软件 阅读详情

相关推荐

OkHttp3请求天气预报与Gson处理复杂JSON字符串

原文地址:http://blog.youkuaiyun.com/donkor_/article/details/53589316。OkHttp3同步/异步Get请求天气预报与Gson处理复杂JSON字符串。内含最新jar包:gson-2.8.0.jar,okhttp-3.5.0.jar,okio-1.11.0.jar

实验项目:解析JSON数据实现天气预报显示

实验目的: 理解JSON数据的基本结构 掌握使用Gson解析JSON数据的方法 实验内容:使用解析JSON文件获取天气预报信息,并将不同城市的天气信息显示在主界面中,应用程序运行时界面如图1所示。单击其他城市按钮时,将显示相应城市对应的天气信息,如图2所示。 图1 程序运行初始界面 图2 切换城市天气显示界面 实验步骤: TestServer服务器端,在WebRoot文件夹下新建weather.json文件,使其包含三个城市的天气信息,每一...

qq_47112287的博客 6682

Cadence IC618版图DRC验证License报错排查:从虚拟机网络配置到HOSTID的实战解析

本文详细解析了Cadence IC618版图设计中DRC验证License报错的排查方法,重点从虚拟机网络配置到HOSTID获取的实战经验。通过对比ifconfig与ip add命令的差异,提供了正确的HOSTID获取方式及License文件修改技巧,帮助工程师快速解决IC618环境下的DRC验证问题。

weixin_30823001的博客 677

java接口获取天气预报json数据

https://blog.youkuaiyun.com/weixin_38959210/article/details/83515783 首先进上面这个链接的文档里面,获取到JAVA调用HTTP接口的方法。 我们用的这个http接口获取天气情况"http://t.weather.sojson.com/api/weather/city/101170301",后面的"101170301"为城市编号。 各城市...

怪只怪满眼尽是人间烟火 8357

软件测试--用例篇(测试用例的好处、测试用例的七种设计方法、测试用例的粒度、测试用例的评价)

作为软件测试工程师,最主要的工作就是:编写测试用例,那么为什么要编写测试用例?它有什么好处?如何编写测试用例?测试用例写简单好还是复杂好?如何评价测试用例的质量? 天呐撸!能说不会吗?! 作为倾向软件测试工程师的老铁们,还是一起来学习吧! 一、编写测试用例的好处 测试用例是测试者的依据 测试用例使得工作可重复,是自动化测试的基础 补充:自动化测试的前提条件是:功能比较稳定,页面...

cherrydreamsover的博客 3734

ESP32-CAM实战:从零构建高精度QR二维码识别系统

本文详细介绍了如何使用ESP32-CAM构建高精度QR二维码识别系统,涵盖硬件配置、开发环境搭建、二维码识别库选择与优化、完整系统实现及实战问题排查。通过优化识别算法和电源管理,系统可实现快速、稳定的二维码识别,适用于物联网设备绑定等场景。

weixin_42524703的博客 433

androidの获取天气预报JSON 实现

androidの获取天气预报JSON 实现 1. 获取当天天气状况利用json实现,如图     从网络端获取的json格式为: {"city":"上海","date":"周一 02月02日 (实时:6℃)","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/xiaoyu.png","nightPictureUrl":

Steampy专栏 1823

PyTorch深度学习实战(1)——神经网络与模型训练过程详解

在本节中,我们将了解传统机器学习与人工神经网络间的差异,并了解如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现反向传播以优化权重达到最小化损失值的目标。并将实现网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 9万+

利用json获取天气信息

天气预报信息获取是利用json获取的,网上有很多资源,源代码。由于上面涉及到很多天气信息,包括湿度,出行建议等,以及添加了所有城市代码的资源包。为了练手了解json的原理。我仅获取诚笃城市的最高温,最低温,城市名字。      我的布局是通过一个按钮获取城市名字,最高温,最低温。main.xnl代码如下 <LinearLayout xmlns:android="http://schemas.an

liaction的专栏 2533

15、运行语音识别应用:从Mac到微控制器的部署指南

本文详细介绍了如何在Mac上运行语音识别应用,并将其部署到Arduino Nano 33 BLE Sense和SparkFun Edge等微控制器设备上的完整流程。内容涵盖应用构建、设备特定的音频与输出实现、部署步骤、常见问题解决方案及进一步优化建议。通过本指南,开发者可快速实现基于TensorFlow Lite的嵌入式语音识别系统,并根据需求进行自定义修改与功能扩展。

l3m4n的博客 57

道路缺陷检测实战指南:基于YOLOv11的深度学习系统从搭建到落地

道路缺陷检测项目的每一步,都是“理论→实践→反思→优化”的成长循环。当你看到自己开发的系统能精准识别出道路上的每一处裂缝、每一个坑洼时,那种“技术解决真实问题”的成就感,会让你明白深度学习不止是论文里的公式,更是改变行业的工具。如果过程中遇到模型不收敛、界面功能异常等问题,不妨把问题拆解成“数据是否标注准确?”“模型参数是否合理?”“界面逻辑是否有漏洞?”等小问题逐一排查。记住,每解决一个问题,你就离“能独立落地AI项目的工程师”更近一步。

LXY_LOVE36的博客 171

新手入门,和风天气预报免费API接口用GSON工具实现数据解析

我是一个入门不久的安卓小菜鸟,在做个人项目,于是就想要做一个有关天气的APP,所以就要到网上找一些免费的接口来获得一些天气的数据,翻来翻去,选中了百度API里面的一个天气接口,叫和风天气预报的,如下图,链接如右点击打开链接   没有预料到的是,我进了一个大大的坑中。和风天气返回的JSON字符串大概是这样的。 { "HeWeather data serv

pigdreams的博客 8726

robosuite 入门教程(一)安装与基本用法

摘要:Robosuite是基于MuJoCo的模块化机器人仿真框架,提供标准化基准测试环境和多样化机器人控制功能。作为ARISE计划的一部分,该框架支持强化学习、模仿学习等算法研究,包含程序化环境生成、多模态传感器、多种控制器及遥操作设备。支持macOS/Linux系统,提供详细安装指南和功能演示脚本,包括随机动作测试、控制器验证、域随机化等。最新版本v1.5新增人形机器人支持、全身控制器和照片级渲染功能,旨在降低机器人学习研究门槛,促进算法开发与评估。

2506_90492529的博客 1267

Android 实战制作简易天气预报

天气预报 临近期末,Android需要交作业所以做了一个比较简单的app,小白勿喷 用到的知识也很简单

愤怒的阿木木的博客 2万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HttpClient+Gson解析中国天气网的天气预报信息

package com.test; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Ite

Larry的博客 2322

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

小功能 获取天气预报 城市联动

效果图(一) 效果图(二) 核心代码 Function_Weather.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.util.ArrayList; impo

gdecking的专栏 1138

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Gson的解析复杂数据,2021年Android常见面试题

public void setResults(List results) { this.results = results; } @Override public String toString() { return “Status{” + “error=’” + error + ‘’’ + “, status=’” + status + ‘’’ + “, date=’” + date + ‘’’ + “, results=” + results + ‘}’; } } Results.java public

m0_64382950的博客 373

java中gso是什么意思_Java中利用gson解析Json实例教程

前言本文主要跟大家介绍了关于java用gson解析json的相关内容,分享出来供大家参考学习,需要的朋友们下面来一起看看吧。json数据{"resultcode": "200","reason": "successed!","result": {"sk": {"temp": "24","wind_direction": "西南风","wind_strength": "2级","humidity":...

weixin_39943678的博客 127

安卓移动平台开发----天气预报APP

概述 第一次打开APP,进入地域选择页面,包括省-市-县三级地域(第一次从网络请求而来,之后从本地数据库读取),选中最后的县,进入天气信息展示界面(天气信息数据来自和风天气);可以通过侧滑菜单选择其他的县;可以下拉刷新得到最新的天气;背景图片来源于bing的每日图片。第二次打开APP,直接进入上次的天气信息展示界面(SharedPreferences)。 大致步骤 从本地数据库或者网络获得地域数据,包括省,市,县,县包括天气ID ListView显示地域信息 首页或者侧滑菜单,根据选择的地

人生当苦无妨 2421

Android开发实战-项目学习笔记(2)

获取市信息 代码部分: import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAd

qq_44458489的博客 715

天气查询

修修补补两个星期,期间借鉴了一些别人的才做出来

Java学习 434

使用GSON解析复杂数据——天气信息

最近在做自己的App时,要在主界面上添加简单的天气信息显示,然后就理所当然的跑到百度查找如何才能获取到天气信息,最后决定采用第三方天气信息服务商提供的数据,在看第三方提供的API说明时发现,获取到的天气数据是Json格式的,需要自己解析。又是经过一番百度,最后确定使用Google提供的Gson库来解析Json数据。 这里不讲为什么,只通过一个例子展现Gson解析Json数据的过程。 使用的编

沃克哈德の博客 1122

Android Stduio实现天气预报系统

本次项目主要实现了天气预报功能。通过调用天气预报接口来获得天气数据,用LIstView和GridView来搭建每个界面,将查询的天气信息存储在SQLiteDatabase中。首页面:有各种组件装饰,显示天气、温度、风向及各种指数,还有未来三天的天气城市管理界面:在这里可以对添加的城市进行管理搜索更多城市页面:可以添加想要查看的城市删除城市页面:可以删除已经添加的城市信息更多设置页面:可以设置壁纸、查看版本信息和分享软件。

振华OPPO的博客世界 4万+

【第29篇】通过HttpClient+Gson解析中国天气网的天气预报信息

通过HttpClient+Gson解析中国天气网的天气预报信息

jilongliang的专栏 1366
上一篇: java微信开发需具备的条件
下一篇: 微信开发之带参二维码的使用
青蛙小王子
博客等级 码龄16年 239粉丝 311原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值