2017-01-03 3 views
0

Я делаю запрос залпа и выкладываю целое число, после этого решения Send Int in HashMap with Volley моего окончательный кода выглядит следующим образом:Volley POST целого

 JSONArray jsonArray = new JSONArray(); 
    JSONObject jsonObject = new JSONObject(); 

    try{ 
     jsonObject.put("store",storeId); 
     jsonObject.put("people", people); 
     jsonObject.put("date",reserveDate); 
     jsonObject.put("time", reserveTime); 
     jsonArray.put(jsonObject); 

     Log.i("jsonString", jsonObject.toString()); 


    }catch(Exception e){ 

    } 


    StringRequest stringRequest = new StringRequest(Request.Method.POST, domain + api, 
      new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 

        Log.e("Response", response); 

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

        Log.e("Error.Response", error.toString()); 
        String json = null; 

        NetworkResponse response = error.networkResponse; 
        if(response != null && response.data != null){ 
         switch(response.statusCode){ 
          case 400: 
           json = new String(response.data); 
           System.out.println(json); 
           //json = trimMessage(json, "message"); 
           //if(json != null) displayMessage(json); 
           break; 
         } 
         //Additional cases 
        } 

       } 

      }) 

    { 
     @Override 
     protected Map<String,String> getParams(){ 
      Map<String,String> params = new HashMap<String, String>(); 
      params.put("store",storeId); 
      params.put("people",String.valueOf(people)); 
      params.put("date", "2017-01-04"); 
      params.put("time", reserveTime); 
      Log.d("params", params.toString()); 
      return params; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<>(); 
      headers.put("Authorization", finalToken); 
      Log.d("headers", headers.toString()); 
      return headers; 
     } 
    }; 

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

Здесь я хочу POST «людей», как целое, но сообщение об ошибке я получаю то, что «люди» это значение строки, я заявил, «народ», как:

Integer people = Integer.parseInt(reserveNum); 

где reserveNum является числовым значением от EditText. как сделать «peopel» в моем запросе целое число?

UPDATE сообщение об ошибке:

{"errors":[{"message":"Invalid type: string (expected integer)","params":{"type":"string","expected":"integer"},"code":0,"dataPath":"/people","schemaPath":"/properties/people/type",..... 
+0

String.valueOf (люди) Эта строка дает ошибку u? – rafsanahmad007

+0

@ rafsanahmad007 Я не уверен, что именно эта строка, но это будет моей догадкой, также пытается изменить String.valueOf (люди) на String.valueOf (3) для тестирования, не помогает ни – JerryKo

+0

не попробовал Integer. toString (люди) – rafsanahmad007

ответ

1

Я фигурировал решение путем изменения Stringrequest к JSONObject reqeust. Таким образом, мой запрос будет в формате JSON, содержащем целые числа вместо строк.

JSONArray jsonArray = new JSONArray(); 
    JSONObject jsonObject = new JSONObject(); 

    try{ 
     jsonObject.put("store",storeId); 
     jsonObject.put("people", people); 
     jsonObject.put("date",reserveDay); 
     jsonObject.put("time", reserveTime); 
     jsonArray.put(jsonObject); 
     Log.i("jsonString", jsonObject.toString()); 


    }catch(Exception e){ 

    } 

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, domain + api, jsonObject, 
      new Response.Listener<JSONObject>(){ 
       @Override 
       public void onResponse(JSONObject response) { 
        Log.e("Response", response.toString()); 
        try { 
         JSONArray arrData = response.getJSONArray("data"); 
         parseData(arrData); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, 
      new Response.ErrorListener(){ 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Log.e("Error.Response", error.toString()); 
        String json = null; 
        NetworkResponse response = error.networkResponse; 
        if(response != null && response.data != null){ 
         switch(response.statusCode){ 
          case 400: 

           json = new String(response.data); 
           System.out.println(json); 
           break; 
         } 
         //Additional cases 
        } 
       } 
      }) 
    { 
     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<>(); 
      headers.put("Authorization", finalToken); 
     Log.d("headers", headers.toString()); 
      return headers; 
     } 
    }; 

    RequestQueue requestQueue = Volley.newRequestQueue(this); 
    requestQueue.add(jsonObjectRequest); 
} 
0

попробуйте следующий код, заменяющий выше код:

JSONArray jsonArray = new JSONArray(); 
    JSONObject jsonObject = new JSONObject(); 

    try{ 
     jsonObject.put("store",storeId); 
     //people is a integer 
     jsonObject.put("people", people); 
     jsonObject.put("date",reserveDate); 
     jsonObject.put("time", reserveTime); 
     jsonArray.put(jsonObject); 

     Log.i("jsonString", jsonObject.toString()); 


    }catch(Exception e){ 

    } 


    JsonObjectRequest stringRequest = new JsonObjectRequest(Request.Method.POST,domain + api, jsonObject, 
       new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(String response) { 

        Log.e("Response", response); 

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

        Log.e("Error.Response", error.toString()); 
        String json = null; 

        NetworkResponse response = error.networkResponse; 
        if(response != null && response.data != null){ 
         switch(response.statusCode){ 
          case 400: 
           json = new String(response.data); 
           System.out.println(json); 
           //json = trimMessage(json, "message"); 
           //if(json != null) displayMessage(json); 
           break; 
         } 
         //Additional cases 
        } 

       } 

      }) 

    { 
     @Override 
     protected Map<String,String> getParams(){ 
      Map<String,String> params = new HashMap<String, String>(); 
      params.put("store",storeId); 
      params.put("people",String.valueOf(people)); 
      params.put("date", "2017-01-04"); 
      params.put("time", reserveTime); 
      Log.d("params", params.toString()); 
      return params; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      HashMap<String, String> headers = new HashMap<>(); 
      headers.put("Authorization", finalToken); 
      Log.d("headers", headers.toString()); 
      return headers; 
     } 
    }; 

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

Спасибо за ваш ответ, однако Я все еще получаю сообщение об ошибке, что люди являются строковыми типами, необходимо целое число – JerryKo

+0

проверить код сервера api ... принимает ли он строку или int ... – rafsanahmad007

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