volley 패키지 사용

안 드 로 이 드 개발 에서 불가피 하 게 네트워크 요청 에 사용 되 었 습 니 다. 볼 리 는 효율 적 인 네트워크 요청 프레임 워 크 입 니 다. 이전 프로젝트 와 현재 프로젝트 는 모두 볼 리 로 네트워크 요청 을 했 기 때문에 볼 리 의 사용 방법 을 정리 할 필요 가 있 습 니 다. 볼 리 의 소스 코드 는 여기 서 분석 하지 않 고 사용 하 는 곳 에 대해 간단하게 말씀 드 리 겠 습 니 다.이 블 로 그 는 volley 를 기반 으로 네트워크 요청 을 할 때 get 요청, post 요청, String 형식 요청, json 형식 요청, xml 형식 요청, 요청 헤드, 요청 체, 요청 매개 변수 등 을 포함 하여 패키지 와 사용 을 할 것 입 니 다.
volley 요청 은 대기 열 을 기반 으로 하기 때문에 어떤 요청 에 도 요청 대기 열 을 만들어 야 합 니 다. 대기 열 에 추가 하 기 를 요청 하 는 것 입 니 다.volley 초기 화 는 보통 activity 로 딩 이나 fragment 를 만 들 때 초기 화 작업 을 합 니 다.
 RequestQueue requestQueue = Volley.newRequestQueue(this);

1. String 형식의 요청
String 형식의 요청 은 간단 합 니 다. 간단 한 응용 프로그램 을 말씀 드 리 겠 습 니 다.
1. get 요청
private void requestTest() {
		//          get  
		StringRequest stringRequest = new StringRequest(Request.Method.GET, "https://www.baidu.com/", new Listener() {

			@Override
			public void onResponse(String response) {
				//response      
			}
		}, new ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				
				
			}
		});
		requestQueue.add(stringRequest)
	}

2, post 요청
private void requestTest() {
		StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://192.168.5.110:8080/list", new Listener() {

			@Override
			public void onResponse(String response) {
				//response      
			}
		}, new ErrorListener() {

			@Override
			public void onErrorResponse(VolleyError error) {
				
				
			}
		}){
			//  getParams    
			@Override
			protected Map getParams() throws AuthFailureError {
				HashMap map = new HashMap();
				map.put("name", "zhangsan");
				map.put("age","28");
				return map;
			}
		};
		requestQueue.add(stringRequest);
	}

2. json 형식의 요청
1. json 의 생 성 및 해석
사용 규칙: 꽃 괄호 를 만나면 JSONobject 를 사용 하고, 네모 난 괄호 를 만나면 JSONarray 를 사용 합 니 다.
예 를 들 면:
JSONobject 생 성:
방법 1: hashmap 집합 사용
 HashMap params = new HashMap();
 params.put("phone", "17310386760");
 params.put("messageCode", "1512");
JSONObject jsonObject = new JSONObject(params );

방법 2: put 직접 사용
JSONObject jsonObject = new JSONObject();
       try {
            jsonObject.put("phone", "15177777777");
 params.put("messageCode", "1512");
        } catch (JSONException e) {
            e.printStackTrace();
 }

방법 3: gsongson 생 성 사용: javabean 을 복잡 하 게 사용 하고 간단하게 사용: new Gson (). toJSon (String str);
2. json 의 volley 패키지 요청
2 - 1, 요청 형식 은 jsonObject 형식의 패키지 입 니 다.
public class JsonObjectRequset extends JsonRequest {
    public JsonObjectRequset(String url, String requestBody, Response.Listener listener, Response.ErrorListener errorListener) {
        super(url, requestBody, listener, errorListener);
    }

    public JsonObjectRequset(int method, String url, String requestBody, Response.Listener listener, Response.ErrorListener errorListener) {
        super(method, url, requestBody, listener, errorListener);
    }

    //       
    @Override
    protected Response parseNetworkResponse(NetworkResponse response) {
        // return null;
        String parsed;
        try {
            parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
        } catch (UnsupportedEncodingException e) {
            parsed = new String(response.data);
        }
        return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
    }

    //      
    @Override
    public Map getHeaders() throws AuthFailureError {
        Map headers = new HashMap();
        headers.put("Charset", "UTF-8");
        headers.put("Content-Type", "application/json");
        return headers;
    }

}

2 - 2. 요청 형식 은 일반 json 형식의 패키지 입 니 다.
public class JsonRequset extends JsonRequest {
    public JsonRequset(String url, String requestBody, Response.Listener listener, Response.ErrorListener errorListener{
        super(url, requestBody, listener, errorListener);
    }

    public JsonRequset(int method, String url, String requestBody, Response.Listener listener, Response.ErrorListener errorListener) {
        super(method, url, requestBody, listener, errorListener);
    }

    //       
    @Override
    protected Response parseNetworkResponse(NetworkResponse response) {
        // return null;
        String parsed;
        try {
            parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
        } catch (UnsupportedEncodingException e) {
            parsed = new String(response.data);
        }
        return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response));
    }

    //      
    @Override
    public Map getHeaders() throws AuthFailureError {
        Map headers = new HashMap();
        headers.put("Charset", "UTF-8");
        headers.put("Content-Type", "application/json");
        return headers;
    }

    //      
    @Override
    public String getBodyContentType() {
        // return String.format("application/x-www-form-urlencoded; charset=%s", "utf-8");
        return super.getBodyContentType();
    }

3. 사용
public void requestTest() {
        String url = "http://192.168.5.110:8080/list";
        Map params = new HashMap();
        params.put("identity", "111111111111111");
         params.put("messageCode", "1512");
         params.put("randClient", "5351");
        JSONObject jsonObject = new JSONObject(params);
              
        JsonRequst jsonRequest = new JsonRequst(Request.Method.POST, url, jsonObject.toString, new Response.Listener() {
            @Override
            public void onResponse(JSONObject response) {
                Log.d("TAG", response + "  ");
            }

        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("TAG", new String(error.networkResponse.data) + "  ");
                }
        });
    requestQueue.add(jsonRequest);
}

3. xml 형식의 요청
1. xml 생 성 및 해석
xml 에 대한 요청 과 해석 에 대한 자세 한 내용 은 다른 블 로그 참조: 링크 를 열 려 면 누 르 십시오.
http://blog.csdn.net/yoonerloop/article/details/53166478
2. xml 네트워크 요청 get 요청
/**
 * Description: xml get  
 * Date       : 2016/10/24 16:21
 */
    public class sad extends Request {

        private final Response.Listener mListener;

        public sad(int method, String url, Response.Listener listener,
                          Response.ErrorListener errorListener) {
            super(method, url, errorListener);
            mListener = listener;
        }

        public sad(String url, Response.Listener listener, Response.ErrorListener errorListener) {
            this(Method.GET, url, listener, errorListener);
        }

        @Override
        protected Response parseNetworkResponse(NetworkResponse response) {
            try {
                String xmlString = new String(response.data,
                        HttpHeaderParser.parseCharset(response.headers));
                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                XmlPullParser xmlPullParser = factory.newPullParser();
                xmlPullParser.setInput(new StringReader(xmlString));
                return Response.success(xmlPullParser, HttpHeaderParser.parseCacheHeaders(response));
            } catch (UnsupportedEncodingException e) {
                return Response.error(new ParseError(e));
            } catch (XmlPullParserException e) {
                return Response.error(new ParseError(e));
            }
        }

        @Override
        protected void deliverResponse(XmlPullParser response) {
            try {
                mListener.onResponse(response);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
        }

    }

3. xml 네트워크 요청 post 요청 (1)
/**
 * Description:       ,xml,  XmlPullParser  xml,requestBody,    xml
 * Date       : 2016/10/26 10:39
 */
    public class aaaa extends Request {
        /** Charset for request. */
        private static final String PROTOCOL_CHARSET = "utf-8";


        /** Content type for request. */
        private static final String PROTOCOL_CONTENT_TYPE =
                String.format("text/xml; charset=%s", PROTOCOL_CHARSET);
        private final String                           mRequestBody;
        private final Response.Listener mListener;


        public aaaa(int method, String url,String requestBody, Response.Listener listener,
                          Response.ErrorListener errorListener) {
            super(method, url, errorListener);
            mListener = listener;
            mRequestBody=requestBody;
        }


        public aaaa(String url,String requestBody, Response.Listener listener,
                          Response.ErrorListener errorListener) {
            this(Method.POST, url,requestBody, listener, errorListener);

        }

        @Override
        protected Response parseNetworkResponse(
                NetworkResponse response) {
            try {
                String xmlString = new String(response.data,
                        HttpHeaderParser.parseCharset(response.headers));
                XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
                XmlPullParser xmlPullParser = factory.newPullParser();
                xmlPullParser.setInput(new StringReader(xmlString));
                return Response.success(xmlPullParser,
                        HttpHeaderParser.parseCacheHeaders(response));
            } catch (UnsupportedEncodingException e) {
                return Response.error(new ParseError(e));
            } catch (XmlPullParserException e) {
                return Response.error(new ParseError(e));
            }
        }


        @Override
        protected void deliverResponse(XmlPullParser response) {
            try {
                mListener.onResponse(response);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
        }
        /**
         * @deprecated Use {@link #getBodyContentType()}.
         */
        @Override
        public String getPostBodyContentType() {
            return getBodyContentType();
        }


        /**
         * @deprecated Use {@link #getBody()}.
         */
        @Override
        public byte[] getPostBody() {
            return getBody();
        }
        @Override
        public String getBodyContentType() {
            return PROTOCOL_CONTENT_TYPE;
        }


        @Override
        public byte[] getBody() {
            try {
                return mRequestBody == null ? null : mRequestBody.getBytes(PROTOCOL_CHARSET);
            } catch (UnsupportedEncodingException uee) {
                VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s",
                        mRequestBody, PROTOCOL_CHARSET);
                return null;
            }
        }
        @Override
        public Map getHeaders() throws AuthFailureError {
            Map headers = new HashMap();
            headers.put("Charset", "UTF-8");
            headers.put("Content-Type", "text/xml");
            headers.put("Accept-Encoding", "*/*");
            headers.put("Connection", "close");
            return headers;
        }
    }

4. xml 네트워크 요청 post 요청 (2)
/**
 * Description:       xml,        xml   
 * Date       : 2016/10/26 17:08
 */
public class StringXMLRequst extends Request {
	private static final String PROTOCOL_CHARSET="utf-8";
	private static final String PROTOCOL_CONTENT_TYPE=String.format("text/xml;charset=%s", PROTOCOL_CHARSET);
	private final String mRequestBody;
    private final Listener mListener;
	public StringXMLRequst(int method, String url, String requestBody, Listener listener, ErrorListener errorlistener) {
		super(method, url,errorlistener);
		this.mListener=listener;
		this.mRequestBody=requestBody;
	}
	public StringXMLRequst(String url, String requestBody, Listener listener, ErrorListener errorlistener) {
		this(Method.POST, url,requestBody, listener,errorlistener);
	}
	
	@Override
	protected Response parseNetworkResponse(NetworkResponse response) {
		try {
			String xmlString=new String(response.data,HttpHeaderParser.parseCharset(response.headers));
			return Response.success(xmlString, HttpHeaderParser.parseCacheHeaders(response));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	protected void deliverResponse(String response) {
		try {
			mListener.onResponse(response);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		}

	}
	/*@Override
	public RetryPolicy getRetryPolicy() {
		RetryPolicy retryPolicy = new DefaultRetryPolicy(15*1000,
				0,
				DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
		return retryPolicy;
	}*/
	@Override
	public String getPostBodyContentType() {
		return getBodyContentType();
	}
	@Override
	public byte[] getPostBody() throws AuthFailureError {
		return getBody();
	}
	@Override
	public String getBodyContentType() {
		return PROTOCOL_CONTENT_TYPE;
	}
	@Override
	public byte[] getBody() throws AuthFailureError {
		// TODO Auto-generated method stub
		try {
			return mRequestBody==null?super.getBody():mRequestBody.getBytes(PROTOCOL_CHARSET);
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	@Override
	public Map getHeaders() throws AuthFailureError {
		Map headers=new HashMap<>();
		headers.put("Charset", "UTF-8");
		headers.put("Content-Type", "text/xml");
		headers.put("Accept-Encoding", "*/*");
		return headers;
	}		
}

위의 3 과 4 의 차 이 는: 요청 한 것 은 모두 String 형식의 xml 이 고, 3 이 되 돌아 오 는 XmlPullParser 형식의 데이터 해석 해석 입 니 다. 4 가 되 돌아 오 는 것 은 String 형식의 문자열 기억 과 권한 입 니 다.

좋은 웹페이지 즐겨찾기