现在的位置: 首页 > 综合 > 正文

“快速递”开发历程(二)Volley解析json数据

2018年01月23日 ⁄ 综合 ⁄ 共 2284字 ⁄ 字号 评论关闭

    好,继续写“快速递”开发历程!

    (二)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!");
				}
			}
		}
	};

抱歉!评论已关闭.