2017-03-01 149 views
1

我在android中使用volley库来调用我们的服务器时尝试发送base64编码图像到服务器请求失败,但是当删除编码的字符串请求成功没有任何问题。 我使用下面的代码编码我的形象
如何将base64字符串发送到服务器使用volley

public static String imgToBase64(Bitmap bitmap) { 
ByteArrayOutputStream out = null; 
try { 
    out = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out); 
    out.flush(); 
    out.close(); 
    byte[] imgBytes = out.toByteArray(); 
    return Base64.encodeToString(imgBytes, Base64.DEFAULT); 
} catch (Exception e) { 
    return null; 
} finally { 
    try { 
    out.flush(); 
    out.close(); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
} 

}


和使用凌空具有以下

public void sendDataToServer(final ApiResponse.Listener<JSONObject> listener, final ApiResponse.ErrorListener errorListener, String image) { 
String url = String.format(ASK, image); 
url = URLEncoder.encode(url); 
JsonRequest sendRequest = new JsonRequest(Request.Method.POST, url, 
     new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
      listener.onResponse(response); 
      } 
     }, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
    if (error != null) { 
     if (error.networkResponse != null) { 
     errorListener.onErrorResponse(error.networkResponse.statusCode, null); 
     } else { 
     errorListener.onErrorResponse(500, null); 
     } 
    } 
    } 
}); 
RequestPipeline.getInstance(mContext).addToRequestQueue(sendRequest); 

}

+0

提供更多详情。请求失败的原因是什么?错误的服务器响应?网络问题?还有别的吗?还有什么是'JsonEmptyResponseRequest'? – SergGr

回答

1

寻找到你的代码发送请求时,它看起来像你试图传递整个编码图像作为URL的一部分。很显然,这失败了,因为服务器通常不支持超过几千个符号的URL。要将长数据传递给服务器,您应该使用POST主体。我不知道你的JsonEmptyResponseRequest类是什么,以及服务器期望的格式(如何指定ASK)。只给你一个想法如何这可能实现

StringRequest sendRequest = new StringRequest(Request.Method.POST, url, 
     new Response.Listener ..., 
     new Response.ErrorListener...){ 

    @Override 
    protected Map<String, String> getParams() throws AuthFailureError { 
     Map<String, String> params = new HashMap<String, String>(); 
     params.put(IMAGE_PARAM_NAME, image); 
     return params; 
    } 
}; 

在你可能想创建自己的子类的Request<T>有通过图像作为构造函数的参数,准确地隐藏的细节现实生活中的什么服务器预期内那个班。请注意,JsonRequest重写getBodygetBodyContentType以使用JSON,因此这将不适用于JsonRequest子类。

+0

感谢您的时间,JsonEmptyResponseRequest我用它来处理我的请求来服务它我的自定义类和ASK是我的URL与我的参数格式化它。我现在就来试试你的想法 – iosamammohamed

+0

@iosamammohamed当我说“我不知道你是什么样的人”时,我的意思不是说我没有总体思路,但我不知道你没有提到的具体细节你的问题,他们提供正确的答案是重要的 – SergGr

相关问题