2017-03-01 11 views
1

私はbase64エンコードされたイメージをサーバーに送信しようとすると、アンドロイドのvolleyライブラリを使用してサーバーに要求を送信しようとしましたが、 は、私は私のイメージ
ボルレイを使用してサーバーに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私は私のカスタマイズされたクラスとASKのサーバーへの私の要求を処理するためにそれを使用して私のパラメータでそれをフォーマットするURLです。私は今あなたのアイデアを試してみます – iosamammohamed

+0

@iosamammohamed私は "私はあなたのようなものが"私は一般的なアイデアを得ることはできませんが、私はあなたが言及しなかった具体的な詳細を知らないことを意味しないあなたの質問と正しい答えを提供することが重要です – SergGr

関連する問題