2016-07-29 10 views
0

私はサーバーのPOSTリクエストを作成し、JSONペイロードを送信し、レスポンスとして文字列レスポンスを受け取る必要があります。私はどこでも見てきましたが、カスタムリクエスト(これを実装しようとすると完全に失われてしまいます)を実装することなく、Volleyライブラリを使ってこれを行う簡単な方法はないようです。このPOSTリクエストを実行するための正しい方法は何ですか?VolleyはJSON Argument、Stringレスポンスのネイティブサポートを持っていますか

答えて

1
final JSONObject body = new JSONObject(); 
    try { 
     // Todo: populate JSON body 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    StringRequest stringRequest = new StringRequest(Request.Method.POST, "http://...", 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 

       } 
      } 
    ) { 
     @Override 
     public byte[] getBody() throws AuthFailureError { 
      return body.toString().getBytes(); 
     } 

     @Override 
     public String getBodyContentType() { 
      return "application/json"; 
     } 
    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(stringRequest); 
+0

パーフェクト - 助けてくれてありがとう。どこかに優雅な解決策があったに違いないとわかった... –

0

VolleyにはJsonObjectRequestとJsonArrayRequestがあります。絶対に

/** 
    * Making json object request 
    * */ 
    public void makeJsonObjReq(String url) { 

     JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET, 
       url, 
       new Response.Listener<JSONObject>() { 

        @Override 
        public void onResponse(JSONObject response) { 
         Log.d(TAG, response.toString()); 
//      msgResponse.setText(response.toString()); 

        } 
       }, new Response.ErrorListener() { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 

      } 
     }) { 

      /** 
      * Passing some request headers 
      * */ 
      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       HashMap<String, String> headers = new HashMap<String, String>(); 
       headers.put("Content-Type", "application/json"); 
       return headers; 
      } 

      @Override 
      protected Map<String, String> getParams() { 
       Map<String, String> params = new HashMap<String, String>(); 
       params.put("name", "[email protected]"); 
       return params; 
      } 

     }; 

     // Adding request to request queue 
     ApplicationController.getInstance().addToRequestQueue(jsonObjReq, 
       tag_json_obj); 

     // Cancelling request 
     // ApplicationController.getInstance().getRequestQueue().cancelAll(tag_json_obj); 
    } 



/** 
    * Making json array request 
    * */ 
    public void makeJsonArryReq(String url, final int _type) { 

     JsonArrayRequest req = new JsonArrayRequest(url, 
       new Response.Listener<JSONArray>() { 
        @Override 
        public void onResponse(JSONArray response) { 
         Log.d(TAG, response.toString()); 
         apiTaskListener.onTaskComplete("error",_type); 


        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d(TAG, "Error: " + error.getMessage()); 
       apiTaskListener.onTaskComplete("error",_type); 

      } 
     }); 

     // Adding request to request queue 
     ApplicationController.getInstance().addToRequestQueue(req, 
       tag_json_arry); 

     // Cancelling request 
     // ApplicationController.getInstance().getRequestQueue().cancelAll(tag_json_arry); 
    } 
+0

が、私は「ポスト」JSONオブジェクトにしたい、と引き換えに、サーバーが私のように解釈される応答を送信します、JSONオブジェクトを「取得」する必要はありません文字列。私は最初にJSONObjectを持っていますが、サーバーに文字列があり、スワップします。 –

+0

あなたは、文字列の一つのフォーマットが、JSONは何もするので StringRequest strReq =新しいStringRequest を使用することができます。 あなたはjsonを文字列として送ることができます。 プロテクトMap getParams()throws AuthFailureError { Map params = new HashMap (); params.put( "data"、json.toString()); return params; } – ViramP

関連する問題