2016-08-19 13 views
0

JSONレスポンスを受け取るREST APIに本体としてのjsonデータをPOSTリクエストとして送信します。私はJsonObjectRequestを使用しています.JsonObjectRequestコンストラクタのjsonObjectを設定するとPOSTとしてリクエストが送信され、そうでなければGETとして送信されることがわかります。私は郵便配達員の要求を実行しようとしてもうまくいきますが、アンドロイドでは、エラー405(メソッドが許可されていません)が表示されます。また、REST APIでは、Content-Type: application/jsonをヘッダーとして送信する必要があります。ここに私のコードは次のとおりです。volley POST jsonオブジェクトとRESTful APIからjsonオブジェクトを受け取ります

JsonObjectRequest req = new JsonObjectRequest(LOGIN_ENDPOINT , payload, 
     new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       try {       
        pDialog.dismiss(); 
        new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.SUCCESS_TYPE) 
          .setTitleText("Response") 
          .setContentText(response.toString()) 
          .setConfirmText("Ok") 
          .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { 
           @Override 
           public void onClick(SweetAlertDialog sweetAlertDialog) { 
            sweetAlertDialog.dismiss(); 

           } 

          }) 
          .show(); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) {     
     pDialog.dismiss(); 
     new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.ERROR_TYPE) 
       .setTitleText("Error") 
       .setContentText(VolleyErrors.getVolleyErrorMessages(error, LoginActivity.this))       
       .setConfirmText("Ok") 
       .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { 
        @Override 
        public void onClick(SweetAlertDialog sweetAlertDialog) { 
         sweetAlertDialog.dismiss(); 

        } 

       }) 
       .show(); 
    } 
}){ 
    @Override 
    public byte[] getBody() { 
     return payload.toString().getBytes(); 

    } 

    @Override 
    public String getBodyContentType() { 
     return "application/json; charset=utf-8"; 
    } 

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     Map<String,String> params = new HashMap<String, String>(); 
     params.put("Content-Type","application/json; charset=utf-8"); 
     return params; 
    } 
}; 


RequestQueue requestQueue = Volley.newRequestQueue(LoginActivity.this); 

requestQueue.add(req); 
+0

コンストラクタに「Request.Method.POST」を追加してみてください。 – cuoka

+0

私はこれを以前試みました。同じエラー –

答えて

0

私は問題はREST APIであったことを考え出し、それが正しい予想される応答を返していましたが、エラーコード405ではなく、予想された200よりも高いので、バレーはそれをエラーとして選んだ。私はREST APIを担当する組織に話しかけ、修正しました。上記のコードはうまく動作しますが、助けようとした皆さんにも多くのご協力ありがとうございます

0

は、次の試してみてください...

Map<String, String> params = new HashMap<String, String>(); 

    //Pass Payload as JSON object like this 

     params.put("user_id", user_id); 
     params.put("user_password", password); 

JSONObject payload= new JSONObject(params); 


JsonObjectRequest req = new JsonObjectRequest(Method.POST,LOGIN_ENDPOINT,payload,new Response.Listener<JSONObject>() { 

     @Override 
     public void onResponse(JSONObject response) { 
      try {       
       pDialog.dismiss(); 
       new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.SUCCESS_TYPE) 
         .setTitleText("Response") 
         .setContentText(response.toString()) 
         .setConfirmText("Ok") 
         .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { 
          @Override 
          public void onClick(SweetAlertDialog sweetAlertDialog) { 
           sweetAlertDialog.dismiss(); 
          } 
         }) 
         .show(); 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    }, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) {     

      pDialog.dismiss(); 
      new SweetAlertDialog(LoginActivity.this, SweetAlertDialog.ERROR_TYPE) 
      .setTitleText("Error") 
      .setContentText(VolleyErrors.getVolleyErrorMessages(error, LoginActivity.this))       
      .setConfirmText("Ok") 
      .setConfirmClickListener(new SweetAlertDialog.OnSweetClickListener() { 

      @Override 
      public void onClick(SweetAlertDialog sweetAlertDialog) { 
         sweetAlertDialog.dismiss(); 
        } 
      }) 
      .show(); 
     } 
     }) { 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 

     HashMap<String, String> headers = new HashMap<String, String>(); 
     headers.put("Content-Type", "application/json; charset=utf-8"); 
     return headers; 
     } 

    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(LoginActivity.this); 

    requestQueue.add(req); 
関連する問題