代码之家  ›  专栏  ›  技术社区  ›  ibad ur rahman

basicnetwork.performRequest:意外响应代码413?

  •  0
  • ibad ur rahman  · 技术社区  · 6 年前

    我想通过以下方法向服务器提交一个数组。我的数组还包含字符串格式(以字符串格式编码)的图像。如果没有图像串,它对我有用。但是当我添加字符串编码的图像时,它会给出以下错误:

    • e/volley:[4084]basicnetwork.performrequest:的意外响应代码413 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 .ValLe.TooBox .Basic No.PrimeRealPress(Basic No.java:190) 05-21 14:37:38.644 18773-18773/satsuma.callerid_realcaller w/system.err:在 COM.Android .ValLe.NETWorkDe调调器.PurrestRevices(NETWorkDealChur.java:120) 05-21 14:37:38.644 18773-18773/satsuma.callerid_realcaller w/system.err:在 COM.Android .Val.NETWorkDe调器.Run(NETWorkDebug .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
    
        }
    

    数组初始化:

     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);
                }
    

    联系方式分类如下:

    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;
    }
    }
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   ravi    6 年前

    是否绝对有必要发送 Contact_Details 到服务器?有只发送一个对象的解决方案吗 联系方式 ?

    413 错误是 Payload Too Large . 关于那个错误的更多信息 here

    请同时核实 位图图像 base64字符串 转换正在工作。

    您可以使用以下类来完成此操作:

    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);
    }
    
    }
    

    除此之外,您可以在服务器端检查数据库是否支持base64长度的字符串。

        2
  •  0
  •   ibad ur rahman    6 年前

    以下代码用于将数组上载到服务器:

    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
    
    
    }
    

    vconnection类的代码如下:

    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);
    }
    

    }