Android 네트워크 프레임 워 크 - Volley (4) get 과 post 방법 으로 json 요청 보 내기
8689 단어 Volley 원리 와 실천
JSON 요청 보 내기
Volley 는 JSON 요청 을 보 내 는 클래스 인 JSonRequest 를 제공 합 니 다.우 리 는 그것 을 직접 사용 할 수 없습니다. 그것 은 추상 적 인 유형 입 니 다. 그 는 두 가지 키 가 있 습 니 다. Json Object Request 와 JsonArray Request 입 니 다.우 리 는 이 두 개의 하위 클래스 를 사용 하여 json 요청 을 보 냅 니 다.
JSonObject Request 사용 하기
// request TAG,
String tag_json_obj = "json_obj_req";
String url = "http://api.androidhive.info/volley/person_object.json";
ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Loading...");
pDialog.show();
// JsonObjectRequest
// get post
//
// , null,
// Listener ,
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
url, null,
new Response.Listener() {
// ,
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
pDialog.hide();
}
}, new Response.ErrorListener() {
// ,
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
// hide the progress dialog
pDialog.hide();
}
});
// request requestQueue ,
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
세 번 째 인자 가 왜 null 로 전 달 됐 는 지 궁금 하 다 면 Json Object Request 의 소스 코드 를 살 펴 보 겠 습 니 다.
// ,(jsonRequest == null) ? null : jsonRequest.toString()
// , , , ,
// 。
public JsonObjectRequest(int method, String url, JSONObject jsonRequest,
Listener listener, ErrorListener errorListener) {
super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
errorListener);
}
// get post 。
//jsonRequest == null ? Method.GET : Method.POST ,
// null, get , null, post
public JsonObjectRequest(String url, JSONObject jsonRequest, Listener listener,
ErrorListener errorListener) {
this(jsonRequest == null ? Method.GET : Method.POST, url, jsonRequest,
listener, errorListener);
}
두 번 째 구조 방법 에서 알 수 있 듯 이 두 번 째 매개 변 수 는 우리 가 null 을 전달 하면 get 방법 을 사용 하고 null 을 전달 하지 않 으 면 post 방법 을 사용 합 니 다.사실 말 그대로 우리 도 이해 할 수 있 습 니 다. get 은 얻 는 것 입 니 다. 어떤 인 자 를 제출 할 필요 가 없습니다. post 는 제출 하 는 것 입 니까? 인 자 를 제출 해 야 합 니 다. 그래서 만약 에 우리 가 전달 할 인자 가 있다 면 post 방법 을 사용 합 니 다. 만약 에 전달 할 인자 가 없다 면 get 방법 을 사용 합 니 다.
그래서 위 에 코드 는 저희 가 이렇게 쓸 수 있어 요.
// request TAG,
String tag_json_obj = "json_obj_req";
String url = "http://api.androidhive.info/volley/person_object.json";
ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Loading...");
pDialog.show();
JsonObjectRequest jsonObjReq = new JsonObjectRequest(url, null,
new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
pDialog.hide();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
pDialog.hide();
}
});
// request requestQueue ,
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
이제 post 요청 을 어떻게 보 내 는 지 보도 록 하 겠 습 니 다.
// request TAG,
String tag_json_obj = "json_obj_req";
String url = "http://api.androidhive.info/volley/person_object.json";
ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Loading...");
pDialog.show();
Map map=new HashMap();
// ,user=zhangqi
map.put("user", "zhangqi");
JSONObject params=new JSONObject(map);
// user=zhangqi。 post
JsonObjectRequest objRequest = new JsonObjectRequest(url, params,
new Response.Listener() {
@Override
public void onResponse(JSONObject obj) {
Log.d(TAG, response.toString());
pDialog.hide();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
// hide the progress dialog
pDialog.hide();
}
});
// request requestQueue ,
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
이렇게 써 도 돼 요.
String tag_json_obj = "json_obj_req";
String url = "http://api.androidhive.info/volley/person_object.json";
ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Loading...");
pDialog.show();
// , post , null,
//getParams()
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
url, null,
new Response.Listener() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
pDialog.hide();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
pDialog.hide();
}
}) {
// map , ,
@Override
protected Map getParams() {
Map params = new HashMap();
params.put("name", "Androidhive");
params.put("email", "[email protected]");
params.put("password", "password123");
return params;
}
};
AppController.getInstance().addToRequestQueue(jsonObjReq, tag_json_obj);
JSonArray Request 사용 하기
JsonArray Request 의 구조 방법 을 살 펴 보 겠 습 니 다.
// url , Listener
public JsonArrayRequest(String url, Listener listener, ErrorListener errorListener) {
super(Method.GET, url, null, listener, errorListener);
}
매우 간단 하고 구조 함수 가 하나 밖 에 없 으 며 매개 변수 가 간단 한 우 리 는 설명 할 필요 가 없다.그냥 예 만 보면 돼.주석 이 필요 없어 요.
String tag_json_arry = "json_array_req";
String url = "http://api.androidhive.info/volley/person_array.json";
ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage("Loading...");
pDialog.show();
JsonArrayRequest req = new JsonArrayRequest(url,
new Response.Listener() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
pDialog.hide();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
pDialog.hide();
}
});
AppController.getInstance().addToRequestQueue(req, tag_json_arry);