0

i want to submit an array to my server through the following method. my array also contain images in string format(encoded in string format). without images string it work for me. but when i add string encoded images it give the following error:

  • E/Volley: [4084] BasicNetwork.performRequest: Unexpected response code 413 for http://www.......com/TrueCaller/submit_contacts.php 05-21 14:37:38.643 18773-18773/satsuma.callerid_realcaller W/System.err: com.android.volley.ClientError 05-21 14:37:38.644 18773-18773/satsuma.callerid_realcaller W/System.err: at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:190) 05-21 14:37:38.644 18773-18773/satsuma.callerid_realcaller W/System.err: at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120) 05-21 14:37:38.644 18773-18773/satsuma.callerid_realcaller W/System.err: at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)*
        private void submitContacts(){

        // now here we convert this list array into json string

        Gson gson=new Gson();

        final String newDataArray=gson.toJson(dataArray); // dataarray is list aaray

        final String server_url="http://www.........com/TrueCaller/submit_contacts.php"; // url of server check this 100 times it must be working



        // volley

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

                        final String result=response.toString();
                        Log.d("response", "result : "+result); //when response come i will log it
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error)
                    {
                        error.printStackTrace();
                        error.getMessage(); // when error come i will log it
                    }
                }
        )
        {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> param=new HashMap<String, String>();
                param.put("array",newDataArray); // array is key which we will use on server side

                return param;
            }
        };
        Vconnection.getnInstance(this).addRequestQue(stringRequest); // vConnection i claas which used to connect volley

    }

array initialisation:

 if (phoneC != "") {
                Bitmap bitmap = retrieveContactPhoto(MainActivity.this, phoneC);
                String image = "";
                if (bitmap != null) {
                    image = getStringImage(bitmap);
                }

                Contact_Details dt = new Contact_Details(name, phoneC, UIDD, country_code, image, emailC, adressC);
                dataArray.add(dt);
            }

Contact_Details class is below:

public class Contact_Details {
String name;
String phone_no;
String identifier;
String country_code;

public String getCountry_code() {
    return country_code;
}

public void setCountry_code(String country_code) {
    this.country_code = country_code;
}

public String getImage() {
    return image;
}

public void setImage(String image) {
    this.image = image;
}

String image;

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

String email;

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

String address;

public Contact_Details(String name, String phone_no, String identifier, String country_code, String image, String email, String address) {
    this.name = name;
    this.phone_no = phone_no;
    this.identifier = identifier;
    this.country_code = country_code;
    this.image = image;
    this.email = email;
    this.address = address;
}


public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getPhone_no() {
    return phone_no;
}

public void setPhone_no(String phone_no) {
    this.phone_no = phone_no;
}

public String getIdentifier() {
    return identifier;
}

public void setIdentifier(String identifier) {
    this.identifier = identifier;
}
}
Asteroid
  • 718
  • 7
  • 21
ibad ur rahman
  • 1,381
  • 4
  • 18
  • 40

2 Answers2

1

Is it absolutely necessary to send the array of Contact_Details to the server? is there a solution to just send one object of Contact_Details?

413 error is Payload Too Large. More on that error here

Please also verify that Bitmap image to Base64 String conversion is working.

You can use the following class to do just that:

public class ImageUtil {
public static Bitmap convert(String base64Str) throws IllegalArgumentException {
    byte[] decodedBytes = Base64.decode(
            base64Str.substring(base64Str.indexOf(",") + 1),
            Base64.DEFAULT
    );

    return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
}

public static String convert(Bitmap bitmap) {
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);

    return Base64.encodeToString(outputStream.toByteArray(), Base64.DEFAULT);
}

}

Other than that you can check on the server side to see if the database supports strings of Base64 length.

ravi
  • 899
  • 8
  • 31
0

below code is for array uploading to server:

private void submitContacts() {


    // now here we convert this list array into json string

    Gson gson = new Gson();

    final String newDataArray = gson.toJson(dataArray); // dataarray is list aaray

    final String server_url = "http://www.vvvv.com/Caller/submit_contacts.php"; // url of server check this 100 times it must be working


    // volley

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

                    final String result = response.toString();
                    Log.d("response", "result : " + result); //when response come i will log it
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    error.printStackTrace();
                    error.getMessage(); // when error come i will log it
                }
            }
    ) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> param = new HashMap<String, String>();
            param.put("array", newDataArray); // array is key which we will use on server side

            return param;
        }
    };
    Vconnection.getnInstance(this).addRequestQue(stringRequest); // vConnection i claas which used to connect volley


}

code of Vconnection class is below:

public class Vconnection {

private static Vconnection nInstance;
private RequestQueue RQ;
private Context CTX;

private Vconnection(Context context)
{
    CTX=context;
    RQ=getRequestQue();

}

public RequestQueue getRequestQue()
{
    if(RQ==null)
    {
        RQ= Volley.newRequestQueue(CTX.getApplicationContext());
    }
    return RQ;
}
public static synchronized Vconnection getnInstance(Context context)
{
    if(nInstance==null)
    {
        nInstance=new Vconnection(context);
    }
    return nInstance;
}
public <T> void addRequestQue(Request<T> request)
{
    int socketTimeout = 30000;
    RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    request.setRetryPolicy(policy);
    RQ.add(request);
}

}

ibad ur rahman
  • 1,381
  • 4
  • 18
  • 40