好,继续写“快速递”开发历程!
(二)Volley解析json数据
第一步要加载这两个包:
接下来要建立RequestQueue这样一个类,并创建实例。
mQueue = Volley.newRequestQueue(this);
下面实现JsonObjectRequest类:具体查看代码中的以下方法。
public void getObject(){ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Method.GET,Constant.URL+"type="+type+"&postid="+postid+"#result", null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject arg0) { // TODO Auto-generated method stub Iterator<String> it = arg0.keys(); while(it.hasNext()){ String key = it.next(); if(!key.equals("data")){ String value; try { value = arg0.getString(key); if(key.equals("nu")){ jsonData.setNu(value); }else if(key.equals("com")){ jsonData.setCom(value); }else if(key.equals("status")){ jsonData.setStatus(value); }else if(key.equals("state")){ jsonData.setState(value); } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ try { JSONArray jsonArray = arg0.getJSONArray(key); jsonData.setLength(jsonArray.length()); jsonData.createData(); for(int i=0;i<jsonArray.length();i++){ JSONObject jsonObject = jsonArray.getJSONObject(i); Iterator<String> it2 = jsonObject.keys(); while(it2.hasNext()){ String key2 = it2.next(); String value2 = jsonObject.getString(key2); if(key2.equals("time")){ jsonData.dates[i].setTime(value2); }else if(key2.equals("context")){ jsonData.dates[i].setContext(value2); }else if(key2.equals("ftime")){ jsonData.dates[i].setFtime(value2); } } } } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } handler.sendEmptyMessage(WAIT); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError arg0) { // TODO Auto-generated method stub Toast.makeText(getActivity(), "请连入网络!", 2000).show(); } }); mQueue.add(jsonObjectRequest); }
用法就是这么多,并不难,但是有几点需要注意的:
1.必须在manifest.xml文件中加入获取网络的权限:
<uses-permission android:name="android.permission.INTERNET"/>
2.Volley请求json数据时是使用手机的网络,所以务必连接网络!
3.必须要注意的是Volley是异步操作,所以如果想在请求json数据后进行的操作不能直接放到请求操作的后面,而应该给Handler发送一个msg.what,从而在handleMessage(Message msg)中处理。
private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub if(msg.what==WAIT){ pDialog.dismiss(); textView.setText(jsonData.getNu()); if(jsonData.nu!=null){ Intent intent = new Intent(getActivity(), DataActivaty.class); DataActivaty.createJson(jsonData); getActivity().startActivity(intent); Log.e("123", "turn to next activity!"); } } } };