如何在正文中发布原始类型的JSON数据?

时间:2019-04-09 12:18:25

标签: java android retrofit

我正在使用Volley请求将发布请求发送到服务器,并且我有一些必须发送的原始Type JSON数据。在这里,我不知道如何发送 第四类对象是数组类型。

要发布的JSON数据是

{
"course_id":1,
"batch_id":1,
"subject_id":1,
"students":[{"student_id":6,"present":0},{"student_id":17,"present":0}] 
}

我的代码

private void fetchDataAndMarkAttendence() {
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            try {
                JSONObject jsonObject = new JSONObject(response);
                status = jsonObject.getString("status");
            } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        }){
        @Override
       public Map<String, String> getHeaders() throws AuthFailureError {
           HashMap<String, String> map = new HashMap<String, String>();
           SharedPreferences prefs = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, Activity.MODE_PRIVATE);
                token = prefs.getString("token","");
                map.put("Authorization", "Token "+token);
                return map;
            }
        }
    }

因此,有关如何发布上述JSON数据的任何帮助将是有帮助的。

3 个答案:

答案 0 :(得分:0)

这称为JSONArray。

try {

        JSONArray jsonArray = jsonObject.getJSONArray();

        for (int i = 0; i < jsonArray.length(); i++) {
            int student_id = jsonObject.getInt("student_id");
            int present = jsonObject.getInt("present");
        }

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

编辑

如前所述,您想发布json。因此,使用下面的代码创建json并将mainJsonObject.toString();作为参数发布。

 try {

        JSONObject mainJsonObject = new JSONObject();

        JSONArray jsonArray = new JSONArray();
        //if more than one then wrap inside loop
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("student_id", value);
        jsonObject.put("present", value);
        jsonArray.put(jsonObject);
        //end loop

        mainJsonObject.put("course_id", value);
        mainJsonObject.put("batch_id", value);
        mainJsonObject.put("subject_id", value);
        mainJsonObject.put("students", jsonArray);

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

希望有帮助。

答案 1 :(得分:0)

用JsonObjectRequest替换您的StringRequest

JSONObject postparams = new JSONObject();
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.POST,
url, postparams,
new Response.Listener() {
    @Override
    public void onResponse(JSONObject response) {
        //Success Callback
    }
},
new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        //Failure Callback
    }
});

答案 2 :(得分:0)

您可以试试吗?这可能会解决您的问题。

RequestQueue requestQueue = Volley.newRequestQueue(this);
StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        try {
            JSONObject jsonObject = new JSONObject(response);
            status = jsonObject.getString("status");
        } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    }){
    @Override
    public byte[] getBody() throws AuthFailureError {
        String yourJSON = yourJsonObj.toString() ;
        return yourJSON.getBytes();
    }
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
         HashMap<String, String> map = new HashMap<String, String>();
         SharedPreferences prefs = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, Activity.MODE_PRIVATE);
              token = prefs.getString("token","");
              map.put("Authorization", "Token "+token);
              return map;
   }
};