实验目的:
实验内容:
使用解析JSON文件获取天气预报信息,并将不同城市的天气信息显示在主界面中,应用程序运行时界面如图1所示。单击其他城市按钮时,将显示相应城市对应的天气信息,如图2所示。
图1 程序运行初始界面 图2 切换城市天气显示界面
实验步骤:
[
{"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级"}
]
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();
implementation 'com.google.code.gson:gson:2.8.6'
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;}
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;
}
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 ArrayListfor (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/85415825https://download.csdn.net/download/qq_47112287/85415825