2017-09-14 6 views
0

내 코드가 서버에 POST 데이터를 보내려고하고 있는데 헤더를 추가해야하며 발리 라이브러리를 사용하고 있습니다.Android Volley POST 요청 (헤더 및 본문 포함)

"getparams"방법을 포함하지 않으면 요청이 작동하지만 게시 할 수 있지만 데이터가 없습니다.

"getparams"메서드를 포함하면 요청이 400 (잘못된 요청)으로 실패합니다.

어디에서 오류를 찾을 수 없었습니다.

  public void tryPost() { 
    RequestQueue queue = Volley.newRequestQueue(this); 

    String serverUrl = "http://10.0.2.2:3000/tasks"; 



    StringRequest stringRequest = new StringRequest(Request.Method.POST, serverUrl, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        Log.d("TAG", "response = "+ response); 
       } 
      }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.d("TAG", "Error = "+ error); 
     } 
    }) 
    { 
     // 
     @Override 
     public Map<String, String> getHeaders() { 
      HashMap<String, String> headers = new HashMap<>(); 
      headers.put("Accept", "application/json"); 
      headers.put("Content-Type", "application/json"); 
      return headers; 
     } 
     //// 
     @Override 
     public Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<>(); 
      params.put("userId","sargent"); 
      params.put("password","1234567"); 
      return params; //return the parameters 
     } 
    }; 
    // Add the request to the RequestQueue. 
    queue.add(stringRequest); 
    } 

답변

0

저는 발리를 많이 사용하지 않지만 쉽게 할 수있는 대안을 가지고 있습니다. AsyncHTTPClient를 사용하여 이것을 시도하고 싶다면. AsynchHTTPClient를 들어

public void tryPost(){ 
    AsynHTTPClient client = new AsyncHTTPClient(); 

    //to add the data which you wanna post 
    RequestParams params = new RequestParams(); 
    params.add("pass your value","from this value"); 
    params.put("list","your_list"); // this is for passing the arraylist 

    client.post(url, params, new AsynchHTTPRespondHandeler(){ 
    // implement method to get the response from onSuccess() 

    }); 
} 

은 Gradle을이 작업을 수행 :

compile 'com.loopj.android:android-async-http:1.4.9' 
당신은 다른 datas here을 통과하기 위해 RequestParams에 대해 자세히 알아볼 수 있습니다

.

이 작업을 수행해 주시기 바랍니다. 어떤 문제가 있으면 핑 (Ping). 당신이

가의 getParams을 제거하고 이 대해 getHeaders에이 추가 대해 getHeaders 대신 의 getParams 내부 정보를 포함해야한다인증을위한

+0

어떻게 도움이되기를 바랍니다 헤더를 추가합니까? – Tori

+0

RequestParams에 대한 설명서를 읽었습니까? 여기에서 이러한 데이터를 추가하는 방법을 알 수 있습니다. 요청 매개 변수를 사용하여 시도해보십시오. 이렇게하면 작업을 수행하거나 더 정확하게 수행하여 실제로 원하는 것을 파악할 수 있습니다. 여기에서 이미 설명해 둔 데이터를 추가하려고합니다. –

+0

헤더를 추가하는 방법을 설명하지 않은 문서를 읽었습니다. 특히 내가하고 싶은 것은 headers.put ("Accept", "application/json"); headers.put ("Content-Type", "application/json"); – Tori

3

@Override 
public Map<String, String> getHeaders() throws AuthFailureError { 
     Map<String, String> headers = new HashMap<>();     
     String credentials = "username:password"; 
     String auth = "Basic " 
         + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); 
     headers.put("Accept", "application/json"); 
     headers.put("Content-Type", "application/json"); 
     headers.put("Authorization", auth); 
     return headers; 
} 

+0

위의 코드는 잘 작동하는 헤더를 추가하지만 param 코드와 결합하면 응답이 잘못된 요청입니다. – Tori