2016-05-08 15 views
0

Android Volleyライブラリを使用してJSON Postリクエストを送信しようとしていますが、JSONの本体を取得していないようで、Webサーバー上で未定義のbodyパラメータがあります。私はjsonのパラメータ本体が単一のオブジェクト "name = someVal & comment = someOtherVal"である必要があります。名前とコメントはキーで、someValとsomeOtherValは値です。Androidボレーを使用してBody with JSON Postを送信

String spreadsheetID = "1111111-11111N92RT9h-11111111111111111111111111111"; 
String url = "https://script.google.com/macros/s/" + spreadsheetID + "/exec"; 
// Instantiate the RequestQueue. 
RequestQueue queue = Volley.newRequestQueue(this); 

// Request a string response from the provided URL. 
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST, 
     url, null, 
     new Response.Listener<JSONObject>() { 

@Override 
public void onResponse(JSONObject response) { 
    Log.d("JSONPost", response.toString()); 
    //pDialog.hide(); 
} 
     }, new Response.ErrorListener() { 

    @Override 
    public void onErrorResponse(VolleyError error) { 
     VolleyLog.d("JSONPost", "Error: " + error.getMessage()); 
     //pDialog.hide(); 
    } 
}) { 

    @Override 
    protected Map<String, String> getParams() { 
     Map<String, String> params = new HashMap<String, String>(); 
     params.put("name=someVal&comment=someOtherVal"); 
     //params.put("comment", "someOtherVal"); 
     return params; 
    } 
}; 
// Add the request to the RequestQueue. 
queue.add(jsonObjReq); 

}

私も上記のコードでこれを試みたが、運:

params.put("comment", "someOtherVal"); 
params.put("name", "someVal"); 

答えて

1

試してみるので、あなたのコードが

Map<String, String> params = new HashMap<String, String>(); 
    params.put("comment", "someOtherVal"); 
    params.put("name", "someVal"); 

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

@Override 
public void onResponse(JSONObject response) { 
    Log.d("JSONPost", response.toString()); 
    //pDialog.hide(); 
} 
     }, new Response.ErrorListener() { 

    @Override 
    public void onErrorResponse(VolleyError error) { 
     VolleyLog.d("JSONPost", "Error: " + error.getMessage()); 
     //pDialog.hide(); 
    } 
}) 
+0

運がまだありません。しかし、ありがとう。 – Amir

+1

私はこの問題を抱えていましたが、私が試した唯一の解決策は、ライブラリを変更することです。私はボレーの代わりに改造を使用しました。すべてがうまくいきます。 –

+0

私はアクチュアリーがURL接続ライブラリで試してみました。 – Amir

0

あなたがhttp.HEADERSとHTTPをダンプする必要があり、その後JSON POSTを送信する必要がある場合.WIREとあなたはおそらく見るべきです....

"Content-Type: application/json" // among headers 
... 
    {"name":"someVal","comment":"someOtherVal"} // in the POST.body 

Volleyでのヘッダーとログワイヤの記録方法を確認してください....

CLIでCURLを使用してPOSTをテストすると、-vスイッチを追加すると詳細が表示されます。その後、あなたはあなたのアンドロイド、httpクライアントにそのまま動かすカールで動作し、それは動作します。

new JsonObject(params) 

で... JsonObjectRequest jsonObjReq前

Map<String, String> params = new HashMap<String, String>(); 
params.put("comment", "someOtherVal"); 
params.put("name", "someVal"); 

を入れて、null値を変更する

+0

android WIRE、HEADERロギングセッションの例(フルログの非ボレークライアントを使用)http://pastebin.com/7eU9GUKV –

1

になりますGoogleスプレッドシートだったようですこの形式を好む:

String spreadsheetID = "111111-111111111D746wspoleBbRN92RT9h-111111"; 
     String url = "https://script.google.com/macros/s/" + spreadsheetID + "/exec"; 
     // Instantiate the RequestQueue. 
     RequestQueue queue = Volley.newRequestQueue(this); 

     StringRequest sr = new StringRequest(Request.Method.POST,url, new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       // 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       // 
      } 
     }){ 
      @Override 
      protected Map<String,String> getParams(){ 
       Map<String,String> params = new HashMap<String, String>(); 
       params.put("name","userAccount.getUsername()"); 
       params.put("comment","userAccount.getPassword()"); 
       return params; 
      } 

      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String,String> params = new HashMap<String, String>(); 
       params.put("Content-Type","application/x-www-form-urlencoded"); 
       return params; 
      } 
     }; 
     queue.add(sr); 
関連する問題