레트로핏2나 AsyncTask로 바꾸기엔 좀 그렇고
사정상 현재 발리로 네트워크 통신 구현된 프로젝트의 유지보수를 빨리 해결해야합니다
근데 파라미터값들 전달이 안되네요......
POST 방식이고... URL에 쿼리스트링으로 GET방식으로 붙여서 하면 잘되는데
소스보시고 뭐가 문제인지 답변 부탁드리겠습니다.. 검색, 삽질 꽤 하고 왔는데 잘안되서 왔으니 너그럽게 봐주세요...ㅠ
[ 결과 ]
onResponse 콜백 함수는 타는데...
400코드와 Required String parameter '파라미터명' is not present 라고 나옵니다.
public void requestTest(final Context context) {
RequestQueue requestQueue = Volley.newRequestQueue(context);
String url = "test~~";
//파라미터 전달 1번째 방법
Map<String, Object> params = new HashMap<String, Object>();
params.put("test", "test");
//파라미터 전달 2번째 방법
// try{
// jsonObject = new JSONObject();
// jsonObject.put("test", "test");
// }catch (JSONException e){
// e.printStackTrace();
// }
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
Method.POST,
url,
new JSONObject(params) /*jsonObject*/,
testListener(),
testErrorListener()){
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
headers.put("test", "test");
return headers;
}
//파라미터 전달 3번째 방법
// @Override
// protected Map<String, String> getParams() throws AuthFailureError {
// Map<String, String> params = new HashMap<String, String>();
// params.put("test", "test");
// return params;
// }
};
requestQueue.add(jsonObjectRequest);
}
public Response.Listener<JSONObject> testListener(){
return new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
Log.i("TAG", "jsonObject : "+jsonObject.toString());
}
};
}
private Response.ErrorListener testErrorListener() {
return new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
};
}
뭐가 잘못된걸까요??? 3가지 방법 다 안됩니다.
유일하게 되는건 url 뒤에 ?test=test&test2=test2 이런 GET 방식만 되네요
API쪽 문제인가요? API쪽도 테스트 화면에선 잘되서 제가 잘못한거같은데 잘모르게네요ㅠㅠㅠㅠ