2017-03-01 5 views
1

Ich benutze Volley-Bibliothek in Android, um unseren Server aufzurufen, wenn versuchen, Base64-codierte Bild an den Server senden die Anfrage fehlschlagen, aber wenn die codierte Zeichenfolge die Anfrage Erfolg ohne irgendein Problem entfernen. Ich verwende den folgenden Code mein Bild, um es
So senden Sie Base64-String an Server mit 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(); 
    } 
} 

}


und senden Anfrage mit Volley mit der folgenden

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

Geben Sie weitere Einzelheiten an. Wie genau schlägt die Anfrage fehl? Schlechte Serverantworten? Netzwerkproblem? Etwas anderes? Auch was ist 'JsonEmptyResponseRequest'? – SergGr

Antwort

1

Blick in den Code zu codieren Es sieht so aus, als ob Sie versuchen, das gesamte kodierte Bild als Teil der URL zu übergeben. Offensichtlich ist dies nicht möglich, da Server normalerweise URLs nicht länger als einige tausend Symbole unterstützen. Um lange Daten an den Server zu übergeben, sollten Sie den Hauptteil des POST verwenden. Ich weiß nicht, was Ihre JsonEmptyResponseRequest Klasse ist und welches Format der Server erwartet (wie ASK angegeben ist). Nur um Ihnen eine Vorstellung davon, wie diese

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

Im wirklichen Leben umgesetzt werden könnte, mögen Sie wahrscheinlich Ihre eigene Unterklasse von Request<T> und übergeben Bild dort als Konstruktor Parameter erstellen und verstecken genau Details von dem, was Server innerhalb erwartet diese Klasse. Beachten Sie, dass JsonRequestgetBody und getBodyContentType überschreibt, um JSON zu verwenden, so dass dies nicht mit der Unterklasse JsonRequest funktioniert.

+0

danke für Ihre Zeit, JsonEmptyResponseRequest ich benutze es um meine Anfragen zu Server es meine benutzerdefinierte Klasse und ASK ist meine URL, um es mit meinem Parameter zu formatieren. Ich werde deine Idee jetzt versuchen – iosamammohamed

+0

@iosamammohamed Wenn ich sage "Ich weiß nicht, was du so oder so", meine ich nicht, dass ich keine allgemeine Idee bekomme, aber dass ich keine spezifischen Details kenne, die du nicht erwähnt hast Ihre Frage und sie sind wichtig, um die richtige Antwort zu geben – SergGr

Verwandte Themen