This is the gist iam refering for uploading images to the server https://gist.github.com/anggadarkprince/a7c536da091f4b26bb4abf2f92926594
But iam using TedPicker OnMultiImageSelectedListener to select multiple images https://android-arsenal.com/details/1/4320
It gives me selectedUriList in an ArrayLIst . I convert all the Uri's to byteArray and upload to server.
Here is my Code of Uploading Image .
private void imageUpload() {
  final ProgressDialog loading = ProgressDialog.show(this,"Uploading...","Please wait...",false,false);
  VolleyMultipartRequest multipartRequest = new VolleyMultipartRequest(Request.Method.POST, Constants.UPLOAD_URL, new Response.Listener<NetworkResponse>() {
    @Override
    public void onResponse(NetworkResponse response) {
      String resultResponse = new String(response.data);
      try {
        JSONObject result = new JSONObject(resultResponse);
        String status = result.getString("status");
        String message = result.getString("message");
        loading.dismiss();
        if (status.equals(Constants.REQUEST_SUCCESS)) {
          // tell everybody you have succed upload image and post strings
          Log.i("Messsage", message);
        } else {
          Log.i("Unexpected", message);
        }
      } catch (JSONException e) {
        e.printStackTrace();
      }
    }
  }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
      loading.dismiss();
      NetworkResponse networkResponse = error.networkResponse;
      String errorMessage = "Unknown error";
      if (networkResponse == null) {
        if (error.getClass().equals(TimeoutError.class)) {
          errorMessage = "Request timeout";
        } else if (error.getClass().equals(NoConnectionError.class)) {
          errorMessage = "Failed to connect server";
        }
      } else {
        String result = new String(networkResponse.data);
        try {
          JSONObject response = new JSONObject(result);
          String status = response.getString("status");
          String message = response.getString("message");
          Log.e("Error Status", status);
          Log.e("Error Message", message);
          if (networkResponse.statusCode == 404) {
            errorMessage = "Resource not found";
          } else if (networkResponse.statusCode == 401) {
            errorMessage = message+" Please login again";
          } else if (networkResponse.statusCode == 400) {
            errorMessage = message+ " Check your inputs";
          } else if (networkResponse.statusCode == 500) {
            errorMessage = message+" Something is getting wrong";
          }
        } catch (JSONException e) {
          e.printStackTrace();
        }
      }
      Log.i("Error", errorMessage);
    }
  }) {
    @Override
    protected Map<String, String> getParams() {
      Map<String, String> params = new HashMap<>();
      params.put("folder_name", FOLDER_NAME);
      return params;
    }
    @Override
    protected Map<String, DataPart> getByteData() {
      Map<String, DataPart> params = new HashMap<>();
      int i = 0;
      for (Uri uri : selectedUriList) {
        i++;
        try {
          InputStream iStream = getContentResolver().openInputStream(uri);
          byte[] inputData = getBytes(iStream);
          params.put("image_file"+i, new DataPart("image"+i+".jpg", inputData , "image/jpeg"));
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
      return params;
    }
  };
  VolleySingleton.getInstance(getBaseContext()).addToRequestQueue(multipartRequest);
}
public byte[] getBytes(InputStream inputStream) throws IOException {
  ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
  int bufferSize = 1024;
  byte[] buffer = new byte[bufferSize];
  int len = 0;
  while ((len = inputStream.read(buffer)) != -1) {
    byteBuffer.write(buffer, 0, len);
  }
  return byteBuffer.toByteArray();
}
I/System.out: [socket]rx timeout:2500
I/System.out: [socket][0] connection ascentcity.com/119.81.195.196:80;LocalPort=45296(2500)
I/System.out: [CDS]connect[ascentcity.com/119.81.195.196:80] tm:2
D/Posix: [Posix_connect Debug]Process com.vst.image.vehiclestimageclassifier :80
I/System.out: [socket][/192.168.31.42:45296] connected
I/System.out: [socket]rx timeout:2500
D/Volley: [22832] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://ascentcity.com/Mobileapp/upload.php 0x43980958 NORMAL 1> [lifetime=48143], [size=116], [rc=200], [retryCount=0]
W/System.err: org.json.JSONException: Value Sorry of type java.lang.String cannot be converted to JSONObject
W/System.err: Â Â at org.json.JSON.typeMismatch(JSON.java:111)
W/System.err: Â Â at org.json.JSONObject.<init>(JSONObject.java:160)
W/System.err: Â Â at org.json.JSONObject.<init>(JSONObject.java:173)
W/System.err: Â Â at com.vst.image.vehiclestimageclassifier.MainActivity$3.onResponse(MainActivity.java:171)
W/System.err: Â Â at com.vst.image.vehiclestimageclassifier.MainActivity$3.onResponse(MainActivity.java:166)
W/System.err: Â Â at com.vst.image.vehiclestimageclassifier.VolleyMultipartRequest.deliverResponse(VolleyMultipartRequest.java:127)
W/System.err: Â Â at com.vst.image.vehiclestimageclassifier.VolleyMultipartRequest.deliverResponse(VolleyMultipartRequest.java:24)
W/System.err: Â Â at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
W/System.err: Â Â at android.os.Handler.handleCallback(Handler.java:739)
W/System.err: Â Â at android.os.Handler.dispatchMessage(Handler.java:95)
W/System.err: Â Â at android.os.Looper.loop(Looper.java:157)
W/System.err: Â Â at android.app.ActivityThread.main(ActivityThread.java:5429)
W/System.err: Â Â at java.lang.reflect.Method.invoke(Native Method)
W/System.err: Â Â at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
W/System.err: Â Â at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
I have a few questions
  @Override
  protected Map<String, DataPart> getByteData() {
    Map<String, DataPart> params = new HashMap<>();
    int i = 0;
    for (Uri uri : selectedUriList) {
      i++;
      try {
        InputStream iStream = getContentResolver().openInputStream(uri);
        byte[] inputData = getBytes(iStream);
        // file name could found file base or direct access from real path
        // for now just get bitmap data from ImageView
        params.put("image_file"+i, new DataPart("image"+i+".jpg", inputData , "image/jpeg"));
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
    return params;
  }
Enter code here...
The error iam facing is due to slow server ? or something else ? how to debug this?
Is there something i need to communicate to backend team (Server Side) , imean to handle my request .
Here is the github link to complete project code https://github.com/sooorajjj/vstImageClassifierÂ
Thanks!