2017-02-07 7 views
0

私はWeb API設定を行い、APIのエンドポイントの1つにJSONオブジェクト(APIでは.NETオブジェクトに解決されます)が使用されます。volleyを使用してWebサービスコールを作成する

私は成功した後にエンドポイントを呼び出すことができますポストマンを使用して、ここにURL

https://example.com/api/helprequests 

そして、ここでは私が

{"Title":"Test Title", "Message":"Test Message"} 

すべてが、ポストマンに適していますポストマンリクエストに含めるJSONです私はVolleyを使ってAndroidアプリからこのAPIを呼び出そうとしています。私はこれを実行すると、ここで

は、関連するコードが

String webAddress = "http://example.com/api/helprequests/"; 
RequestQueue queue = Volley.newRequestQueue(this); 
StringRequest stringRequest = new StringRequest(Request.Method.POST, webAddress, 
     new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       Log.d("RESPONSE", response); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       Log.d("RESPONSE", "That didn't work!"); 
      } 
     }) { 
      @Override 
      public String getBodyContentType() { 
       return "application/json"; 
      } 
      @Override 
      public byte[] getBody() throws AuthFailureError { 
       try { 
        Map<String, String> params = new HashMap<String, String>(); 
        params.put("Title","Test title"); 
        params.put("Message", "Test message"); 
       } catch (Exception ex) { 
        VolleyLog.wtf("Unsupported Encoding"); 
        return null; 
       } 
       return null; 
      } 
     }; 
queue.add(stringRequest); 

である私は、次のエラーを取得する:

E/Volley: [50225] BasicNetwork.performRequest: Unexpected response code 500 for https://example.com/api/helprequests 

私はバレーボールリクエストにPOSTデータを追加するにはどうすればよいですか?

Postman image

+0

タイトルとメッセージは、体内ではなく、ヘッダーにすることになっていますか?また、あなたはBodyでnullを返しています。 – Enzokie

+0

私はタイトルとメッセージが本文にあるべきだと思う - getBodyの目的は何ですか?私はこれをオンラインで複数の場所から集めました。 – andrewb

+0

'getBody'を使わないでください。あなたはJSONを持っています。 VolleyにはJSONクラスがあります。 http://afzaln.com/volley/com/android/volley/toolbox/JsonObjectRequest.html –

答えて

2

代わりのStringRequestを使用してJsonObjectRequestを使用して行います。

String webAddress = "http://example.com/api/helprequests/"; 
RequestQueue queue = Volley.newRequestQueue(this); 

JSONObject object = new JSONObject(); 
try { 
    object.put("Title", "my title"); 
    object.put("Message", "my message"); 
} catch (JSONException e) { 
} 

JsonObjectRequest request = new JsonObjectRequest(Request.Method.POST, webAddress,object, new Response.Listener<JSONObject>() { 

    @Override 
    public void onResponse(JSONObject object) { 
     Log.d("RESPONSE", object.toString()); 
    } 

}, new Response.ErrorListener() { 

    @Override 
    public void onErrorResponse(VolleyError volleyError) { 
     Log.d("RESPONSE", "That didn't work!"); 
    } 

}); 
queue.add(request); 
+0

まだ同じエラーが発生している – andrewb

0
String webAddress = "http://example.com/api/helprequests/"; 
RequestQueue queue = Volley.newRequestQueue(this); 

JSONObject jsonObject= new JSONObject(); 
try { 
    jsonObject.put("Title", "my title"); 
    jsonObject.put("Message", "my message"); 
} catch (JSONException e) { 
} 

RequestQueue queue = Volley.newRequestQueue(getApplicationContext()); 
     JsonObjectRequestWithHeader jsonObjReq = new JsonObjectRequestWithHeader(Request.Method.POST, 
       webAddress , jsonObject, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       Log.v("Response0", response.toString()); 
} 
}, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       VolleyLog.d("Response", "Error: " + error.getMessage()); 
       pd.dismiss(); 

      } 
     }); 
     int socketTimeout = 50000;//30 seconds - change to what you want 
     RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT); 
     jsonObjReq.setRetryPolicy(policy); 
     queue.add(jsonObjReq); 
     return null; 
    } 
+0

このコードでは質問に答えることができますが、問題の解決方法や理由を追加で説明すると、回答の長期的な価値が向上します。 –

関連する問題