2017-03-01 160 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

相關問題