好,继续写“快速递”开发历程!
(二)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.必须在manife
st.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!");
}
}
}
};