마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

발리 네트워크 통신 고수있나요?ㅜㅜ

0 추천

레트로핏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쪽도 테스트 화면에선 잘되서 제가 잘못한거같은데 잘모르게네요ㅠㅠㅠㅠ

익명사용자 님이 2017년 2월 24일 질문
모든 post가 다 안되고 있는 건가요? 그게 아니라면 반드시 들어가야할 파라미터가 안 들어가서가 아닐까요?
네 로그는 그런식으로 나오는거 같은데 파라미터 값, 파라미터명 다 오늘 하루종일 확인해봐서요.. 그건 아닌거같고 잘모르겟네요......  답변 감사합니다

1개의 답변

0 추천
 
채택된 답변
jsonObjectRequest가 아닌 StringRequest를 사용해 보세요~~!
ThisPlus (46,920 포인트) 님이 2017년 2월 24일 답변
잘되네요..

제이슨타입 데이터 받아와야되서 제이슨오브젝트리퀘스트 했었는데

그냥 스트링 타입의 제이슨형태 데이터로 잘받아지니 그걸로 값써야겟네요


답변 감사합니다
근데 파라미터 보낼때 StringRequest는 String 타입만 가능한거같은데 인티저 타입은 어떻게 전달해야하나요???
아마도 그냥 스트링으로 보내시면 서버에서 변환하여 사용할겁니다.
...