2017-03-01 2 views
1

저는 base64 인코딩 된 이미지를 서버로 보내려 할 때 안드로이드의 발리 라이브러리를 사용하여 서버에 요청하면 요청이 실패하지만 인코딩 된 문자열을 제거하면 아무 문제없이 요청이 성공합니다. 나는 내 이미지
발리를 사용하여 서버에 base64 문자열을 보내는 방법

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 지정 방법)을 알지 못합니다. 서버 내부에 무엇을 기대 그냥 당신이 당신이 아마 Request<T>의 자신의 하위 클래스를 생성하고 생성자 매개 변수로이 이미지를 전달하고 정확하게 세부 사항을 숨기려면 실제 생활에서

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

구현 될 수 있는지 아이디어를 제공합니다 그 계급. JsonRequestgetBodygetBodyContentType을 재정 의하여 JSON을 사용하므로 JsonRequest 하위 클래스에서는 작동하지 않습니다.

+0

시간을내어 주셔서 감사합니다. JsonEmptyResponseRequest 저는 서버에 대한 내 요청을 처리하여 내 맞춤 클래스로 사용하고 요청할 때 내 매개 변수로 서식을 지정하는 URL입니다. 나는 당신의 아이디어를 지금 시도 할 것입니다 – iosamammohamed

+0

@iosamammohamed "내가 너의 그런 것과 그런 것이 무엇인지 모르겠다."나는 그것이 일반적인 생각을 갖지는 않는다는 것을 의미하지만, 당신이 언급하지 않은 구체적인 세부 사항을 알지 못한다고 말할 때 귀하의 질문과 그들이 정답을 제공하는 것이 중요합니다 – SergGr