Sto lavorando su un'applicazione Android che richiede l'uso di HttpClient per caricare un file dal dispositivo Android su un server web. Il file che sto caricando può raggiungere dimensioni fino a 1 Gb, pertanto i timeout possono verificarsi se il dispositivo perde la connessione durante il caricamento. La cosa strana è che il timeout impostato per il socket non sembra avere alcun effetto. L'applicazione si bloccherebbe ogni volta che perdo la connessione invece di aumentare SocketTimeoutException.Apache HttpClient 4.0 non riesce a timeout per socket su Android
Ho provato utilizzando:
HttpConnectionParams.setConnectionTimeout(params, CrashLogParams.TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CrashLogParams.TIMEOUT);
ma questo ha lavorato solo per il timeout di connessione, non il timeout presa. Inoltre ho provato:
HttpParams p = httpclient.getParams();
p.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
p.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
La ragione So che timeout di connessione funziona è perché, vorrei ottenere l'eccezione per timeout di connessione dopo l'esecuzione
httpclient.execute(httppost);
L'applicazione sembra bloccarsi quando la connessione viene persa durante il caricamento , ma dopo che l'applicazione ha effettuato correttamente una connessione al server.
Per testare la mia app, ho disattivato la rete in momenti diversi per vedere come avrebbe reagito l'applicazione. Se disattivo la rete prima di inviare la richiesta, ottengo un errore di connessione e la mia applicazione può gestirlo correttamente, ma se lo disattivo durante il caricamento l'applicazione si blocca. Ovviamente sto facendo tutte queste richieste tramite AsyncTasks, quindi il thread UI principale non si blocca. Mi sto solo chiedendo se ci sia un altro modo per assicurarsi che il socket si interrompa non ricevendo dati, o se mi manca qualcosa qui. Ho letto molti blog e post, ma molti di loro suggeriscono di utilizzare SO_TIMEOUT che non funziona per me.
sotimeout not working in a multipart http post on android 2.1
La tua app ha funzionato con file di dimensioni più piccole? – momo
Ho provato 1 file mb e il bug è ancora lì.Immagino che con file più piccoli avrai una maggiore probabilità di disconnessione in tempi tra i caricamenti dei file, ma questo è oltre il punto. Voglio essere in grado di rendere robusta la mia applicazione in caso di guasti alla rete. –
Sto riscontrando lo stesso esatto problema, tranne che le dimensioni del caricamento sono abbastanza piccole, dell'ordine di alcuni kb. Tutto ciò che sembra essere necessario per attivare il bug è che la rete si spenga dopo che ho controllato se è attiva, ma prima chiamo execute(). – Michael