下面是在做天气预报程序时用到的Json通信,解析方法,备份一下,下次找就方便了;
1、链接服务器获取json字符串:
public static String getJsonContent(String city) {
String urlString="";
try {
urlString = URL + "&location=" + URLEncoder.encode(city, "UTF-8")
+ "&ak=" + APP_KEY;
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
try {// 获取HttpURLConnection连接对象
URL url = new URL(urlString);
HttpURLConnection httpConn = (HttpURLConnection) url
.openConnection();
// 设置连接属性
httpConn.setConnectTimeout(8000);
httpConn.setDoInput(true);
httpConn.setRequestMethod("GET");
// 获取相应码
int respCode = httpConn.getResponseCode();
if (respCode == 200) {
return ConvertStream2Json(httpConn.getInputStream());
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "";
}
private static String ConvertStream2Json(InputStream inputStream) {
String jsonStr = "";
// ByteArrayOutputStream相当于内存输出流
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
// 将输入流转移到内存输出流中
try {
while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) {
out.write(buffer, 0, len);
}
// 将内存流转换为字符串
jsonStr = new String(out.toByteArray());
} catch (IOException e) {
e.printStackTrace();
}
return jsonStr;
}
2、解析Json字符串:
Json的解析无外乎Jsonobject、JsonArray,针对服务器返回的具体字符串进行解析,下面只是给了一个例子,例子对应的Json字符串如下:
result:{
"error":0,"status":"success","date":"2014-07-30",
"results":[
{"currentCity":"北京","pm25":"209",
"index":[
{"title":"穿衣","zs":"热","tipt":"穿衣指数","des":"天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。"},
{"title":"洗车","zs":"不宜","tipt":"洗车指数","des":"不宜洗车,路面积水较多,不宜擦洗汽车。如果执意擦洗,要做好溅上泥水的心理准备。"},
{"title":"感冒","zs":"较易发","tipt":"感冒指数","des":"相对今天出现了较大幅度降温,较易发生感冒,体质较弱的朋友请注意适当防护。"},
{"title":"运动","zs":"较适宜","tipt":"运动指数","des":"阴天,较适宜进行各种户内外运动。"},
{"title":"紫外线强度","zs":"弱","tipt":"紫外线强度指数","des":"紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。"}],
"weather_data":[
{"date":"周三 07月30日 (实时:23℃)","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/duoyun.png","weather":"多云","wind":"微风","temperature":"29 ~ 24℃"},
{"date":"周四","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"微风","temperature":"31 ~ 24℃"},
{"date":"周五","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/duoyun.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/duoyun.png","weather":"多云","wind":"微风","temperature":"34 ~ 25℃"},
{"date":"周六","dayPictureUrl":"http://api.map.baidu.com/images/weather/day/qing.png","nightPictureUrl":"http://api.map.baidu.com/images/weather/night/qing.png","weather":"晴","wind":"微风","temperature":"34 ~ 24℃"}
]
}
]
}
public static int getJsonResult(String result) {
int resultError = 0;
Map<String, String> reslutMap = new HashMap<String, String>();
try {
JSONObject jObject = new JSONObject(result);
//返回错误码,0为正常,其他请查询状态表;
resultError = Integer.valueOf(jObject.get("error").toString());
//网络时间
NET_DATE = jObject.get("date").toString();
JSONArray jArray = new JSONArray(jObject.get("results").toString());
JSONObject jaObject = jArray.getJSONObject(0);
//当前城市
NET_CITY = jaObject.get("currentCity").toString();
NET_PM25 = jaObject.get("pm25").toString();
//指数
indexList.clear();
JSONArray indexArray = new JSONArray(jaObject.get("index")
.toString());
for (int i = 0; i < indexArray.length(); i++) {
JSONObject indexObject = indexArray.getJSONObject(i);
IndexEntity index = new IndexEntity();
index.setTitle(indexObject.get("title").toString());
index.setZs(indexObject.get("zs").toString());
index.setTipt(indexObject.get("tipt").toString());
index.setDes(indexObject.get("des").toString());
indexList.add(index);
}
//天气
weatherList.clear();
JSONArray weatherArray = new JSONArray(jaObject.get("weather_data")
.toString());
for (int i = 0; i < weatherArray.length(); i++) {
JSONObject weatherObject = weatherArray.getJSONObject(i);
WeatherEntity weather = new WeatherEntity();
weather.setDate(weatherObject.get("date").toString());
weather.setDayPictureUrl(weatherObject.get("dayPictureUrl")
.toString());
weather.setNightPictureUrl(weatherObject.get("nightPictureUrl")
.toString());
weather.setWeather(weatherObject.get("weather").toString());
weather.setWind(weatherObject.get("wind").toString());
weather.setTemperature(weatherObject.get("temperature")
.toString());
weatherList.add(weather);
}
} catch (JSONException e) {
e.printStackTrace();
}
return resultError;
}
分享到:
相关推荐
Android Http (Json) 服务器端和客户端通信
利用json进行服务器与Android的通信,其中包括json解析与打包.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android网络开发中如何使用JSON进行网络通信---Android_JSON数据通讯方法解析
本项目网络层使用Volley+OkHttp3,即用Volley来进行网络通信,用OkHttp3来处理Volley的底层HTTP请求,Json解析使用Gson,数据库使用Realm, 图片加载使用Glide+OkHttp3,列表使用RecyclerView+Cardview,下来刷新使用...
JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习。恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位
实现了最简单的在Android客户端将数据封装为json格式,并且传到服务器,服务器将数据解析出来,并封装自己的数据到json中传回到客户端,客户端解析服务器传过来的数据并显示,采用HttpClient进行通信,亲自测试,...
基于图灵完成Android系统的智能聊天机器人。主要涉及技术:异步通信、Json数据解析、布局的实现、数据的封装。实现智能问答聊天,智能生活服务语义理解等。
Android 网络编程方法,掌握数据解析方法。 【实验要求】 1、 练习使用 HttpClient 建立网络连接,访问网络数据 2、 练习 XML 数据解析方法 3、 完成实验报告 二、实验内容 1、 电脑连接网络; 2、 新建 Android 应用...
8.3.1 JSON数据解析 8.3.2 XML数据解析 8.4 Web Service访问 8.5 小结 练习 第9章 多媒体应用 9.1 音频与视频的播放 9.1.1 MediaPlayer 9.1.2 SoundPool 9.1.3 VideoView 9.1.4 SurfaceView 9.2...
蓝牙聊天,可以发送json和xml的解析数据
提高UI设计能力 巩固Android程序设计基础 异步更新UI 掌握Android中HTTP通信 掌握JSON格式解析
2. JSON数据解析:我们应用程序支持JSON数据解析,让你能够轻松处理服务器返回的数据。这样,你可以从服务器获取配置文件等信息,并在绘画过程中灵活应用。 3. 本地文件存取:我们还提供了本地文件存取功能,让你...
C#写的服务器,android客户端,完成手机和电脑通信,手机端访问远程数据库,涉及到知识点有数据库操作,socket通信,json数据解析。新手可以参考一下
安卓和服务器数据交换,Android和pc端的通信,xml,json,安卓到服务器,服务器到安卓,xml数据解析,json数据解析,http通信
基于图灵api完成Android的机器人聊天软件。不是单纯的内置聊天信息,机器人会根据你输入的信息,智能...UI模仿QQ聊天气泡对话模式。代码简单清晰(附注释),涉及到的技术有异步通信、数据封装、json解析、布局实现。
采取了一种建立在adb基础之上的Usb通信方式:由于adb可以将Usb模拟为网卡,所以可以利用socket通信的方式实现Android与PC通信,以完成同步功能 启动流程: 1.android应用启动server端 2.启动ADB桥插件中的adb启动...
平台选择:理解并选择合适的移动操作系统平台...JSON解析:能使用Gson、Jackson、JSONModel等进行JSON数据解析与序列化。 GPS定位:了解并实现GPS和网络定位功能,处理地理坐标转换与地图展示。 推送通知:掌握Fireb
端,26_采用JSON格式返回数据给资讯客户端,27_网络通信之通过GET和POST方式提交参数给web应用,28_网络通信之通过 HTTP协议实现文件上传,29_发送xml数据和调用webservice,30_多线程下载原理。。。
借助和风天气API做一个天气预报APP 运用Web API 异步响应技术、JSON数据解析方法、Sqlite数据库设计与模块化开发技术、UI动态加载数据的方法,实现了以下功能: 分析城市数据Web API,实现省份、地级市、城区及县城...