2016-04-14 19 views
0

ich Postbote versucht mit, es funktioniert ganz feinJSONArray Post nicht von Android App arbeiten

Postman Screenshot

Aber wenn ich aus der App zu veröffentlichen, nur die Tabelle und die Kostenträger wird gebucht.

Hier ist mein Android Code

JSONObject sendObj = null; 

      sendObj = new JSONObject(); 
      try { 
       sendObj.put("table",mTableUser); 
       sendObj.put("cost",cost); 

       for(int i=0;i<mOrderFoodList.size();i++) { 

        sendObj.put("serve["+i+"][food]",mOrderFoodList.get(i).getID()); 
        sendObj.put("serve["+i+"][number]",mOrderFoodList.get(i).getQuantity()); 
        sendObj.put("serve["+i+"][status]", 0); 

       } 


      }catch (JSONException e) { 
       e.printStackTrace(); 
      } 
mVolleyService.postDataVolley("POSTCALL", mConstants.BASE_URL +mConstants.ORDER, sendObj); 

Dies ist die Ausgabe von Android App

ist
{ 
"_id": "570fc02422ed0203002723d2", 
"cost": 60, 
"table": 1, 
"__v": 0, 
"serve": [] 
} 

Von Postman,

{ 
"_id": "570faed422ed0203002723c8", 
"cost": 200, 
"table": 20, 
"__v": 0, 
"serve": [ 
    { 
    "food": "56fac73f284ea80300ba6b42", 
    "quan": 4, 
    "status": 0, 
    "_id": "570faed422ed0203002723c9" 
    }, 
    { 
    "food": "56fac6d0284ea80300ba6b41", 
    "quan": 3, 
    "status": 0, 
    "_id": "570faed422ed0203002723ca" 
    } 
] 
} 

Mit dieser Funktion

public void postDataVolley(final String requestType, String url,JSONObject sendObj){ 
    try { 
     queue = Volley.newRequestQueue(mContext); 

     JsonObjectRequest jsonObj = new JsonObjectRequest(url,sendObj, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       if(mResultCallback != null) 
        mResultCallback.notifySuccess(requestType,response); 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       if(mResultCallback != null) 
        mResultCallback.notifyError(requestType,error); 
      } 

     }) 
     { 
      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       HashMap<String, String> headers = new HashMap<>(); 
       headers.put("x-access-token", token); 


       return headers; 
      } 



     }; 

     queue.add(jsonObj); 

    }catch(Exception e){ 

    } 
} 
für die Buchung

Welchen Fehler mache ich beim Senden des JSONObject?

+1

vielleicht ist mOrderFoodList leer? – Pooya

+0

Nein, ich habe im Protokoll eingecheckt, es ist nicht leer :( – MrRobot9

+0

@ArjunHegde Können Sie den vollständigen Code zum Senden der Daten zeigen? –

Antwort

0

Sie müssen JSONArray für serve erstellen. Erstellen Sie für jeden Aufschlag einen JSONObject und legen Sie ihn in den JSONArray.

diesen Code Versuchen Sie,

JSONObject sendObj = new JSONObject(); 
try { 
    sendObj.put("table",mTableUser); 
    sendObj.put("cost",cost); 

    JSONArray serveArray = new JSONArray(); 
    for(int i=0; i<mOrderFoodList.size(); i++) { 
     JSONObject singleServe = new JSONObject(); 
     singleServe.put("food",mOrderFoodList.get(i).getID()); 
     singleServe.put("number",mOrderFoodList.get(i).getQuantity()); 
     singleServe.put("status", 0); 
     serveArray.putJSONObject(singleServe); 
    } 
    sendObj.putJSONArray(serveArray); 

} catch (JSONException e) { 
    e.printStackTrace(); 
}