首页 > 解决方案 > 如何将多个信息数组和一个图像数组传递给服务器?

问题描述

我有一个包含图像的图像数量的数组,另一个是包含图像大小的图像大小数组,也是一个图像数组。我正在尝试将它们发送到服务器,但每次都失败了。我正在尝试很多示例,但对我没有任何帮助。有没有其他方法可以做到这一点?请给我一些提示或链接。

如何在android中使用凌空发送参数数组

public void uploadMultipleImage(String url, final List<SelectedImageModel> selectedImageModels)
{
    VolleyMultipartRequest multipartRequest = new VolleyMultipartRequest(Request.Method.POST, url, new Response.Listener<NetworkResponse>() {
        @Override
        public void onResponse(NetworkResponse response) {
            String resultResponse = new String(response.data);
            responseListener.onResultSuccess(resultResponse);
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            NetworkResponse networkResponse = error.networkResponse;
            String result = new String(networkResponse.data);
            responseListener.onResultSuccess(result);
        }
    }) {
        @Override
        protected Map<String, String> getParams() {
            HashMap<String, String> params = new HashMap<>(selectedImageModels.size());

            for(int i=0; i<selectedImageModels.size(); i++)
                params.put("size["+i+"]",selectedImageModels.get(i).getPhotoSize());

            for(int i=0; i<selectedImageModels.size(); i++)
                params.put("quantity["+i+"]",selectedImageModels.get(i).getPhotoQuantity());

            return params;
        }

        @Override
        public Map<String, String> getHeaders()  {
            Map<String, String> headers = new HashMap<>();

            headers.put("Authorization", "Bearer "+requiredInfo.getAccessToken());
            headers.put("Accept", "application/json");
            headers.put("Content-Type", "x-www-form-urlencoded");
            return headers;
        }

        @Override
        protected Map<String, DataPart> getByteData() {
            Map<String, DataPart> params = new HashMap<>(selectedImageModels.size());

            for(int i=0; i<selectedImageModels.size(); i++)
                params.put("image["+i+"]",new DataPart("imageName",UserProfile.getFileDataFromDrawable(selectedImageModels.get(i).getPhoto())));


            return params;
        }
    };

    requestQueue.add(multipartRequest);
}

每次我收到 com.android.volley.server 错误 500 这个错误

标签: androidandroid-volley

解决方案


创建一个发送参数数组的方法。

      private String makeJsonObjectParams() {


//In mediaData,I am sending image to AWS and I will get the download link and I 

// 将下载地址存储在 downloadurl 数组列表中。

 JSONArray mediaData = new JSONArray();
    try {
        if(img1 != 1) {
            JSONObject temp = new JSONObject();
            temp.put("file", download_url.get(0));
            temp.put("type", "signature");

            mediaData.put(temp);
        }

        if(img2 != 1){

                JSONObject temp1 = new JSONObject();
                temp1.put("file", download_url.get(1));
                temp1.put("type", "id proof");

                mediaData.put(temp1);

        }



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

    //for sending normal details like text
    JSONObject updateDetails = new JSONObject();
    try {


        updateDetails.put("status", 2);
        updateDetails.put("userId", sharedPreferences.getString("user_ID",""));
        updateDetails.put("deviceToken", splash_screen.android_id);




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

    JSONObject jsonVerificationDetails = new JSONObject();
    try {
        jsonVerificationDetails.put("type", verificatin_type);
        jsonVerificationDetails.put("durationOfStay", durationOfStay.getText().toString());

        jsonVerificationDetails.put("media", mediaData);

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

    JSONObject jsonBody = new JSONObject();
    try {
        jsonBody.put("verificationDetails", jsonVerificationDetails);
        jsonBody.put("updateDetails", updateDetails);


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

    final String mRequestBody = jsonBody.toString();

    return mRequestBody;

}

}

通过下面的代码将代码发送到服务器。

 void submitData(){

        try {
            RequestQueue requestQueue = Volley.newRequestQueue(MainActivity.this);
            final String mRequestBody = makeJsonObjectParams();

            StringRequest stringRequest = new StringRequest(Request.Method.POST, completedTaskUrl, new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                       //do whatever you want
                        }
                    } catch (JSONException e) {

                    }


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

                }
            }) {
                @Override
                public String getBodyContentType() {
                    return "application/json; charset=utf-8";
                }


                @Override
                public byte[] getBody() throws AuthFailureError {
                    try {
                        return mRequestBody == null ? null : mRequestBody.getBytes("utf-8");
                    } catch (UnsupportedEncodingException uee) {
                        VolleyLog.wtf("Unsupported Encoding while trying to get the bytes of %s using %s", mRequestBody, "utf-8");
                        return null;
                    }
                }

                @Override
                protected Response<String> parseNetworkResponse(NetworkResponse response) {
                    String responseString = "";
                    if (response != null) {

                        responseString = String.valueOf(response.statusCode);

                    }
//                    return Response.success(responseString, HttpHeaderParser.parseCacheHeaders(response));
                    return super.parseNetworkResponse(response);
                }
            };
            requestQueue=Volley.newRequestQueue(getApplicationContext());

            requestQueue.add(stringRequest);
        } catch (Exception e) {//JSONException e
            e.printStackTrace();
        }

    }

推荐阅读