2017-02-07 14 views
0

У меня есть настройка веб-api, и одна из конечных точек API принимает объект JSON (который в API получает разрешение на объект .NET).Использование волейбола для вызова веб-службы

Использование Почтальон я могу успешно назвать пост конечную точку, вот URL

https://example.com/api/helprequests 

А вот JSON, который я включаю в запросе Почтальон

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

Все хорошо работает в Почтальон, но я пытаюсь назвать этот API из приложения Android, используя Volley.

Вот соответствующий код

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 

Как добавить пост данные для запроса Volley?

Postman image

+0

Предполагаются Нотариальный и сообщение, чтобы быть в теле, а не в заголовке? Также вы возвращаете null в Тело. – Enzokie

+0

Я думаю, что название и сообщение должны быть в теле - в чем цель getBody? Я поставил это вместе из нескольких мест онлайн – andrewb

+0

Не используйте 'getBody'. У вас есть JSON. Волейбол имеет классы 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

Хотя этот код может ответить на вопрос, предоставление дополнительного контекста относительно того, как и/или почему оно решает проблему, улучшит долгосрочную ценность ответа. –

 Смежные вопросы

  • Нет связанных вопросов^_^