2010-07-20 20 views
8

Güncellenmiş içeriği kontrol etmek için web'deki bir içerik kaynağına düzenli olarak bağlanmak (örneğin saatlik) için bir arka plan işlemi kullanan bir android kodu var. Yeni kullanıcılar uygulamayı indirdikçe ve ilk kez çalıştırdıkça, bu ilk çalıştırma durumunda, sunucularımız için DNS'nin zaten cihazda önbelleğe alınmadığı anlaşılıyor. Bu ilk seri bağlantılardan korkma UnknownHostException ile başarısız: Host çözülmez ve tabii ki, uygulama daha sonra tekrar dener ve (yine, "gibi görünüyor") hepsi çalışıyor - belki işletim sistemi gerçekten çözmek için zaman vardı çünkü . adresAndroid java.net.UnknownHostException: Ana makine çözülmemiş (strateji sorusu)

Yani, sorum (ler) şunlardır: (1) diğer Android geliştiricileri de onların dağıtılan uygulamaları ile bu davranışı görüyor musunuz İlk kez, daha sonra kendilerini egzersiz sorunlar "çözülmemiş barındırmak" bir dizi (?. 2) Herkesin ilk gerçek bağlantıları işe yarayacak şekilde "DNS'i ısıtmak" için daha iyi bir stratejisi var mı, yoksa belki de bu istisna ile karşılaştığınız zaman bazı geri dönüş döngüleri ile yeniden deneyiniz mi? siyon? Sunucumuzdan küçük bir metin dosyasını almaya çalışan ve bunu gelinceye kadar sadece bir döngü oluşturmayı düşünen ve belki de (bu kısımdan emin değil) diğer giden ağ bağlantılarını başarılı olana kadar engelleyen ayrı bir iş parçacığına sahip olmayı düşünmekteydim. Her halükarda

, burada yığın taşması üzerinde çeşitli benzer ifadeli sorulara cevaplar bir yığın içinden okudum ve sadece

<uses-permission android:name="android.permission.INTERNET" /> 

benim Manifest dosyasında ayarlanmış olduğunu herkes sağlamak için :)

+1

Aynı sorunla karşılaştık. Analiz etmek için, paketi varsayılan bir dns'e (8.8.8.8) gönderen bir icmp ping'i uyguladık. Gözlemlediğimiz şey, ip ping testinin başarılı olmasına rağmen (bu nedenle bir İnternet bağlantısı mevcut olsa da) UnknownHostException ile karşılaştık. Bunun sebebi ne olabilir? – icyerasor

cevap

14

HttpUrlConnection kullanırken bu davranışa rastladım. Basit bir geçici çözüm kullanıyorum - herhangi bir url kullanmadan hemen önce aşağıdaki kodu çalıştırın. url'sinin Burada elde İlk defa

try { 
     InetAddress i = InetAddress.getByName(URLName); 
    } catch (UnknownHostException e1) { 
     e1.printStackTrace(); 
    } 
// ... actually using URLName 

UnknownHostException ama sonraki kullanımları (DNS sunucusu uygun bir IP adresi verir ve ben sunucuya bağlanabilirsiniz) başarılıdır.

+0

çok ilginç bir fikir, bart. kayıt için HttpUrlConnection kullanıyoruz. Teşekkürler! Az sayıda istisna görüp görmediğimizi görmek için bir deneme ve izleme yapacağım. – sorens

+0

Dün gece google arama api ile aynı sorunu yaşadım ... geri dönen ana bilgisayar bulunamadı ... herhangi bir fikrin sebebi nedir? – androidworkz

+0

Bunu da deneyimliyordum ama problemle karşılaşan başkalarının ruhunda, mayının SD Karttan kaynaklanmadığını duymak isteyebileceklerini ve bu çözümlenmemiş ana bilgisayar hatalarını BufferedInputStream (urlConnection.getInputStream() üzerinde veren yerel depolama alanı bulunmadığını)) aramak. – sradforth

İlgili konular