热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

实验目的:理解JSON数据的基本结构掌握使用Gson解析JSON数据的方法实验内容:使用解析JSON文件获取天气预报信息,并将不同城市

实验目的:


  1. 理解JSON数据的基本结构
  2. 掌握使用Gson解析JSON数据的方法

实验内容:
使用解析JSON文件获取天气预报信息,并将不同城市的天气信息显示在主界面中,应用程序运行时界面如图1所示。单击其他城市按钮时,将显示相应城市对应的天气信息,如图2所示。

图1 程序运行初始界面                         图2 切换城市天气显示界面

实验步骤:


  1.  TestServer服务器端,在WebRoot文件夹下新建weather.json文件,使其包含三个城市的天气信息,每一个城市天气都由tempweathernamepmwind属性组成,json文件如下:

[{"temp":"20℃/30℃","weather":"晴转多云","name":"上海","pm":"80","wind":"1级"},{"temp":"15℃/24℃","weather":"晴","name":"北京","pm":"98","wind":"3级"},{"temp":"26℃/32℃","weather":"多云","name":"广州","pm":"30","wind":"2级"}]

  1. 导入项目原始代码,在MainActivity.javaonCreate()方法内部,通过访问服务器获取JSON数据并将数据封装到消息中发送给UI线程。

       new Thread(new Runnable() {
           
@Override
           
public void run() {
               
try {
                    OkHttpClient client=
new OkHttpClient();
                    Request request=
new Request.Builder().url(urlStr).build();//是两边的类型相匹配
                   
Response response=client.newCall(request).execute();//返回的响应的数据
//                  Call call=client.newCall(request);
//                  Response response=call.execute();
                   
System.out.println("********respnse详细信息***:"+response);
                   
if (response.isSuccessful()){
                        String str=response.body().string();
                        System.
out.println("*****************这是一个分机线***************************");
                        System.
out.println(str);
                        Message msg=Message.obtain();
//获取message对象obj,传递数据 
                       
msg.obj=str;
                        System.
out.println(msg.obj);
                       
handler.sendMessage(msg);
                    }
else{
                        System.
out.println("response失败");
                    } }
catch (IOException e) {
                    e.printStackTrace();
                } }}).start();


  1. 在模块的Dependencies选项中添加Gson依赖库。

implementation 'com.google.code.gson:gson:2.8.6'

  1. 在模块对应的包名下创建JSON数据对应的实体类WeatherInfo类,实体类中的成员名称要与JSON数组的key值一致,并为每个属性添加getset方法。

public String getTemp() {return temp;}public void setTemp(String temp) {this.temp = temp;}public String getWeather() {return weather;}public void setWeather(String weather) {this.weather = weather;}public String getName() {return name;}public void setName(String name) { this.name = name;}public String getPm() { return pm;}public void setPm(String pm) { this.pm = pm;}public String getWind() { return wind;}public void setWind(String wind) { this.wind = wind;}

  1. MainActivity.java中完成getInfosFromJson()方法。采用Gson库来解析JSON格式的字符串,并解析后的数据存入List集合并返回。

public static List getInfosFromJson(String json)throws IOException {Gson gson=new Gson();//使用gson库解析JSON数据System.out.println(json);Type listType = new TypeToken>(){}.getType();List list = gson.fromJson(json,listType);System.out.println(json);return list;}

  1. Handler对象的handleMessage()方法中,调用getInfosFromJson()方法解析获取到的JSON数据,并将天气信息集合保存到weatherInfos中。

public void handleMessage(@NonNull Message msg) {super.handleMessage(msg);//获取子线程传递过来的json数据并保存到变量中String json= (String) msg.obj;System.out.println(json);List weatherInfos = null;//调用getInfosFromJson()方法,将天气信息集合保存到weatherInfos中try {weatherInfos=getInfosFromJson(json);} catch (IOException e) {e.printStackTrace();}//循环读取weatherInfos中的每一条数据list = new ArrayList>();for (WeatherInfo info : weatherInfos) {map = new HashMap();map.put("temp", info.getTemp());map.put("weather", info.getWeather());map.put("name", info.getName());map.put("pm", info.getPm());map.put("wind", info.getWind());list.add(map);}}};

实验运行结果截图:

 

 

图1 程序运行初始界面                         图2 切换城市天气显示界面

实验总结:

在此次的实验中:

一是对于OKhttp的移动端和服务端的数据交换有了更为清楚的认识,可以更加熟练的使用OKhttp进行数据的访问和交换;

二是对于json的数据交换和访问也进行了学习可以更好的进行json数据的获取、解析、利用;

另外再此次的实验过程由于自己的粗心,将json文件中的一个英文符号写成了中文,导致了程序的运行的失败;

Unterminated array at line 2 column 68 path $[2]

项目连接:https://download.csdn.net/download/qq_47112287/85415825icon-default.png?t=M4ADhttps://download.csdn.net/download/qq_47112287/85415825


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 注意:以下分析都是基于Retrofit2转载请注明出处:http:blog.csdn.netevan_manarticledetails51320637本节是《Retrofit的使 ... [详细]
  • Retrofit+Rxjava+OkHttp
    为什么80%的码农都做不了架构师?参考:http:duanyytop.github.io20160806Retrofit%E7%94%A8%E6% ... [详细]
  • 09 性能优化网络优化
    如何优化一个网络请求呢?相信大家在面试的时候可能会被问到这个问题。今天我其实就是讲述下我知道的一些简单的优化方式,可以帮助大家在面试的过程中得到点基础分数。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
author-avatar
wiggin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有