2010-07-20 122 views
8

我有一個使用一個後臺進程定期(例如每小時)連接到內容源在網絡上檢查更新的內容Android的代碼。當新用戶第一次下載應用程序並運行它時,似乎(現在看來這似乎是)在第一次運行的情況下,因爲我們的服務器的DNS沒有被緩存在設備上,那些第一系列的連接失敗並帶有可怕的UnknownHostException:Host is unolved。當然,應用程序在稍後再次嘗試(再次,「看起來像」)它全部正常工作 - 可能是因爲OS有時間來真正解決地址的Android的java.net.UnknownHostException:主機是尚未解決的(戰略問題)

所以,我的問題是:(1)其他Android開發人員是否也看到了他們已部署的應用程序的這種行爲?第一次,一系列未解決的「主機未解決」問題。 2)有沒有人有更好的策略來「熱身DNS」這樣說話,以便第一次真正的連接起作用?或者當你遇到這個例外時,你可能會重新嘗試一些回退循環重刑?我打算有一個單獨的線程,試圖從我們的服務器獲取一個小文本文件,並讓它只是循環,直到它得到它,也許(不知道這部分)阻止其他傳出的網絡連接,直到它成功。

在任何情況下,我走過的答案在這裏對堆棧溢出各種類似的措詞問題的一大塊閱讀,我只是到

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

在我的清單文件設置保證大家:)

+1

我們遇到了同樣的問題。爲了分析它,我們實現了一個icmp ping,它將數據包發送到默認的dns(8.8.8.8)。我們觀察到,即使ip-ping測試成功(因此Internet連接可用),我們仍然遇到了UnknownHostException。任何想法可能是什麼原因呢? – icyerasor 2013-01-08 17:56:37

回答

14

我在使用HttpUrlConnection時遇到過這種情況。我正在使用簡單的解決方法 - 在使用任何url之前執行下面的代碼。該URL的

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

對於我第一次在這裏獲得,但的UnknownHostException未來用途是成功的(DNS服務器返回正確的IP地址,我可以連接到服務器)。

+0

非常有趣的想法,巴特。爲了記錄,我們使用HttpUrlConnection。謝謝!我會試一試,看看是否會看到減少的例外情況。 – sorens 2010-07-21 16:51:00

+0

我昨天晚上用google搜索api發現了同樣的問題......它一直在返回主機未找到......任何想法會導致什麼? – androidworkz 2010-07-22 14:10:08

+0

我正在經歷這個太多,但在別人的精神,遇到問題時,他們可能會喜歡聽到地雷是由SD卡不存在,並具有了對我的BufferedInputStream這個懸而未決的主機錯誤沒有本地存儲引起的(urlConnection.getInputStream() )電話。 – sradforth 2011-05-31 22:56:43

相關問題