学习本节之前,需要下载Apache,此处贴出具体的教程链接,https://blog.csdn.net/smile_shaco/article/details/74787612。
首先准备好一个json文件,记得保存时的格式改为json就行了。
刚开始接触json,不太了解,解析JSON数据有多种方法,先学个两个
1.JSONObject;
private void sendRequsetWithOkHttp()
{
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection=null;
BufferedReader reader=null;
try{
OkHttpClient client=new OkHttpClient();
Request requset = new Request.Builder()
// 指定服务器的地址 - 10.0.2.2对于模拟器来说就是电脑本机的IP地址
.url("http://10.0.2.2:8080/get_data.json")
.build();
Response response=client.newCall(requset).execute();
String responseData=response.body().string();
paraseJSONWithGSON(responseData);
showResponse(responseData);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}).start();
}
private void paraseJSONWithJSONObject(String jsonData)
{
try {
JSONArray jsonArray = new JSONArray(jsonData);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
String id = jsonObject.getString("id");
String name = jsonObject.getString("name");
String version = jsonObject.getString("version");
Log.d("MainActivity", "id is:" + id);
Log.d("MainActivity", "version is:" + version);
Log.d("MainActivity", "name is:" + name);
}
}
catch (Exception e) {
e.printStackTrace();
}
}
这里指的注意的是指定访问的服务器为电脑本机,郭神书上的url为10.0.2.2,可能是配置的路径不同,我的端口为8080,必须写到这,否则啥都显示不出,因为我是照着上面的链接配置的Apache.基本是照着书桥的代码,这里用的是OKHttp,也是接触的。
所以就是按着模板来写的,首先需要new一个client对象,姑且称为客户吧,
然后啊,再new一个request对象,用来发起Http请求,但是光杆司令无趣,所以在request的build()
方法前,可以连缀些其它方法,可以这么理解,在 request为被Build之前,可以加很多方法,
具体如 Request requset = new Request.Builder()
// 指定服务器的地址 - 10.0.2.2对于模拟器来说就是电脑本机的IP地址
.url("http://10.0.2.2:8080/get_data.json")
.build();现加一个吧,其他的暂时还不知啊.
最后,调用OKHttpClient的newCall()方法来创建一个Call对象,并调用他的excute()方法,来发送请求并 获取服务器返回的数据. 这里有点难以理,贴个链接吧 https://blog.csdn.net/qq_18402085/article/details/51052167
这里的代码 :Response response=client.newCall(requset).execute();
response 就是Response的对象,得到了服务器返回的数据,对数据可以使用一个String对象来实现得到 具体内容. String responseData=response.body().string();
最后将这些数据内容使用JSONObject解析出来,看方法名就能知道了,.
回顾下来,发现JSON的代码量还是很精简的.关键还使用了OKHttp,换做Http也不会这么简单的.
2.GSON
先比较两段代码吧
这是使用GSON解析JSON的代码,会发现更加精简了
private void paraseJSONWithGSON(String jsonData)
{
Gson gson=new Gson();
List<App>appList=gson.fromJson(jsonData, new TypeToken<List<App>>(){}.getType());
for (App app:appList)
{
Log.d("MainActivity", "id is:" + app.getId());
Log.d("MainActivity", "version is:" + app.getVersion());
Log.d("MainActivity", "name is:" + app.getName());
}
}
具体来分析一下,官方解释是:可以将一段JSON格式的字符串自动映射成一个对象,从而不需要我们再手动去编写代码进行解析.
如果是一段JSON格式的数据,{"id":1,"name":"Tony"}, 可以定义一个Sdutent类,加入id和name两个字段,简单调用代码即可将json数据自动解析为Student对象了:
Gson gson=new Gson();
Student student=gson.fromJson(jsonDate,Student.class);
但是如果是JSON数组,那么就会麻烦一点,需要调用TypeToken将期待解析成 的数据类型传入到fromJson()方法中.