最近的项目里要用到解析接口传来的JsonArray.
这玩意虽然都已经做了很多遍了,老方法就是用HttpUrlConnection或者HttpClient封装好一个SendPost.给接口发请求,看着数据里的"[...]"来一个JsonArray对象,看见","来一个JsonObject对象,转成一个个的Bean数据实体就OK了。
但今天想换个前卫一点的方法,用了一次著名网络框架Volley和谷歌自己的Json解析库Gson,让我觉得整个世界都轻松了许多。
首先介绍一下这两个著名的框架。
1.Volley
在Volley之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的 Google I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
这是Volley名称的由来: a burst or emission of many things or a large amount at once
Volley提供的功能
简单来说,它提供了如下的便利功能:
2.Gson
Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。
jar和源码下载地址: http://code.google.com/p/google-gson/downloads/list
在项目中,我使用Volley进行对接口的网络通信。获取数据后,用Gson解析。
Volley的强大之处。
private void getNetData(){
RequestQueue requestQueue = Volley.newRequestQueue(getApplicationContext());
StringRequest stringRequest = new StringRequest(Request.Method.POST,URL,
new Response.Listener() {
@Override
public void onResponse(String response) {
Log.d("re", "response -> " + response);
arrayList.addAll((ArrayList)gson.fromJson(response, new TypeToken>(){}.getType()));
musicListAdapter=new MusicListAdapter(arrayList);
musicListView.setAdapter(musicListAdapter);
onLoad();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("er", error.getMessage(), error);
}
}) {
@Override
protected Map getParams() {
//在这里设置需要post的参数
Map map = new HashMap();
map.put("page", page+"");
return map;
}
};
requestQueue.add(stringRequest);
}
在参数设置,请求成功与请求失败的处理上,Volley极其的简洁以及高效。
貌似还能异步加载图片。
加载图片的话还有一个神一样存在的Glide,下次再说。
2.Gson
再说Gson.
arrayList.addAll((ArrayList)gson.fromJson(response, new TypeToken>(){}.getType()));
一句话干了以前for循环加JsonObject解析多少行的事情。
gson.fromJson一句便可以将一个JsonArray的字符串转化为装着Bean的ArrayList.
项目中用到的在此就介绍完了。我已经把两个jar包上传
Volley: http://download.csdn.net/detail/lizhaowei213/9300851
Gson: http://download.csdn.net/detail/lizhaowei213/9300853