Sto cercando di inviare un'immagine con i miei dati di post al mio assistente da Android. Per realizzare questa base ho 64 codificato la mia immagine a stringa e lo ha inviato utilizzando la libreria volley Android. Questo sta causando problemi però. Per qualche ragione a volte invia il post due volte, e non riesco a capire perché. Di seguito è riportata la funzione che viene chiamata per inviare la richiesta di post. Ho messo un segno di pausa al String url = "http://domain.com/ajax_ws.php";
e poi uno alla protected Map<String, String> getParams() {
Quello che ho trovato è l'String url = ...
è solo essere chiamata una volta ma quando si invia due, il protected Map...
viene chiamato due volte. Non riesco a trovare alcuna documentazione su Android volley, quindi non so perché questo sta accadendo. La bitmap viene ridimensionata in modo che la stringa di immagine sia costantemente compresa tra 100 e 200 caratteri. Ho pensato che forse era un problema di dimensioni ma il mio server sta ricevendo le immagini e decodificandole e tutto va bene.Android volley sta inviando le informazioni due volte con il caricamento di immagini
public void Sharing() {
pd = ProgressDialog.show(getParent(), null, "Please Wait...");
final String caption = mEtMessage.getText().toString();
RequestQueue queue = Volley.newRequestQueue(this);
String url = "http://domain.com/ajax_ws.php";
StringRequest postRequest = new StringRequest(
Request.Method.POST,
url,
new MyStringListener(),
new MyErrorListener()
) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("token", "secretToken");
params.put("mode", "createVoucher");
params.put("user_id", ActivityLogin.id);
params.put("deal_id", ActivitySharing.id_deal);
params.put("user_id_company", ActivityRestaurantDetails.res.getId());
params.put("user_img", pathImage);
params.put("caption", caption);
params.put("company_id", ActivityRestaurantDetails.res.getId());
return params;
}
};
queue.add(postRequest);
}
Qualsiasi idea del perché questo potrebbe accadere?
Solo un suggerimento: Sarebbe bene estrarre anonimo 'Response.Listener' per separare (inner?) Classe per semplificare le cose e rendere il codice più leggibile. Al momento è abbastanza ingombrante e rende la metà dello schermo coperta da trattini. –
@Secator Grazie, lo farò, questo codice è stato attraverso lo strizzatore, è tutto finito. – tomjung
Sto affrontando il problema esatto. La mia ulteriore indagine mostra che si tratta di una connessione lenta. Ho provato a eseguire il debug della libreria Volley e ho trovato uno schema che il doppio post è causato dalla SocketTimeoutException nella classe BasicNetwork nel metodo "performRequest (richiesta > richiesta)". Ogni volta che viene sollevata l'eccezione, avviene un doppio post. Sfortunatamente non ho alcuna soluzione per questo. Fammi sapere il tuo pensiero. E inoltre, non vedo questo correlato a RetryPolicy. Qualsiasi numero inserito in RetryPolicy non influirà sulla correzione. –