Android cihazından bir web sunucusuna dosya yüklemek için HttpClient kullanımını gerektiren bir Android uygulaması üzerinde çalışıyorum. Yüklediğim dosya 1 Gb'ye kadar boyutlara ulaşabilir ve bu nedenle cihaz yükleme sırasında bağlantıyı kaybederse zaman aşımları oluşabilir. Garip olan şey, soket için belirlediğim zaman aşımının herhangi bir etkisi olmadığı görünüyor. SocketTimeoutException'ı yükseltmek yerine, bağlantıyı kaybettiğimde uygulama askıda kalıyordu. Apache HttpClient 4.0 Android'de soket için zaman aşımı başarısız oldu
kullanıyorum çalıştı:HttpConnectionParams.setConnectionTimeout(params, CrashLogParams.TIMEOUT);
HttpConnectionParams.setSoTimeout(params, CrashLogParams.TIMEOUT);
ama bu sadece bağlantı zaman aşımı değil, soket zaman aşımı çalıştı. Ayrıca Denedim:
HttpParams p = httpclient.getParams();
p.setIntParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);
p.setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
Ben
httpclient.execute(httppost);
uygulama bağlantısı yükleme sırasında kaybolduğunda askıda görünüyor yürüttükten sonra bağlantı zaman aşımı için istisna alacağı, çünkü bağlantı zaman aşımı çalıştığını biliyoruz nedeni ancak uygulama başarıyla sunucuya bağlantı kurduktan sonra.
Uygulamamı test etmek için, uygulamanın nasıl tepki vereceğini görmek için ağı farklı zamanlarda devre dışı bıraktım. İsteği göndermeden önce ağı devre dışı bırakırsam bir bağlantı hatası alıyorum ve uygulamamın bu şekilde ele alınabilir, ancak yükleme sırasında bunu devre dışı bırakırsam uygulama kilitleniyor. Tabii ki tüm bu istekleri AsyncTasks ile yapıyorum, bu yüzden ana UI Thread çökmez. Ben sadece soket herhangi bir veri almadığında zaman aşımına uğramak ya da burada bir şey eksik varsa emin olmak için başka bir yolu olup olmadığını merak ediyorum. Birçok blog ve yazı okudum, ancak çoğu sadece benim için çalışmayan SO_TIMEOUT kullanmayı öneriyor.
sotimeout not working in a multipart http post on android 2.1
Uygulamanız daha küçük boyutlu bir dosyada çalıştı mı? – momo
1 mb dosyaları denedim ve hata hala var.Sanırım daha küçük dosyalarda, dosya yüklemeleri arasında zaman ayırma olasılığınız daha yüksektir, ancak bu noktadan başka bir şey değildir. Ağ arızaları durumunda uygulamamın sağlam olmasını sağlamak istiyorum. –
Bu aynı sorunu yaşıyorum, benim yükleme boyutları benim için birkaç kb sırasına göre oldukça küçük. Bu hatayı tetiklemek için gerekli gibi görünen şey, ağın çalışıp çalışmadığını kontrol ettikten sonra, ancak execute() işlevini çağırmadan önce aşağı inmesidir. – Michael