2010-05-25 60 views
4

我想讀雅虎的RSS源,但我無法使其正常工作。代碼是絕對正確的,我確信它。它有時有效,但有時我得到UnknownHostException。可能是什麼原因?我的網絡或其他東西有問題嗎?這是我的代碼: -的UnknownHostException在java中(太只是有時)

public List<RssFeed> getRssFeed() { 

     try { 

      List<RssFeed> objList = new ArrayList<RssFeed>(); 


      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse("http://rss.news.yahoo.com/rss/india"); 

      //doc.getDocumentElement().normalize(); 
      Element docElement = doc.getDocumentElement(); 
      NodeList objChannelList = docElement.getChildNodes(); 


      for (int intIndex = 0; intIndex < objChannelList.getLength(); intIndex++) { 
       if (objChannelList.item(intIndex).getNodeType() == Node.ELEMENT_NODE) { 


        Element elemItem = (Element) objChannelList.item(intIndex); 
        NodeList itemList = elemItem.getElementsByTagName("item"); 

        //show only 3 news 
        int count = itemList.getLength() > 3 ? 3 : objChannelList.getLength(); 

        for (int intSubIndex = 0; intSubIndex < count; intSubIndex++) { 
         NodeList itemDetailList = itemList.item(intSubIndex).getChildNodes(); 
         String strTitle = ((Node) itemDetailList.item(RSS_VALUES.TITLE.getValue())).getFirstChild().getNodeValue(); 
         String strdescription = ((Node) itemDetailList.item(RSS_VALUES.DESCRIPTION.getValue())).getFirstChild().getNodeValue(); 
         String strLink = ((Node) itemDetailList.item(RSS_VALUES.LINK.getValue())).getFirstChild().getNodeValue(); 
         //System.out.println(strTitle + "\n" + strdescription + "\n" + strLink + "\n\n\n\n"); 
         objList.add(new RssFeed(strTitle, strdescription, strLink)); 
        } 

       } 
      } 
      return objList; 
     } catch (SAXException ex) { 
      Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (IOException ex) { 
      Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (ParserConfigurationException ex) { 
      Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex); 
     } 

     return null; 
    } 

在此先感謝:)。自1個月以來,這個問題一直困擾着我。不知道爲什麼在這種情況下做的Java表現爲按照其情緒:(

+1

一個UnknownHostException被拋出。有些東西在DNS層面沒有解決,這不是java或xml問題。 – 2010-05-25 17:07:35

回答

4

可能發生這種情況如果發生在DNS服務器打嗝。除了使DNS服務器更強大的還是尋找一個又一個,你也可以只是使用完整的IP地址而不是主機名。這樣,它並不需要基於主機名來查找IP地址。 截至目前它的 216.115.98.240

db.parse("http://216.115.98.240/rss/india"); 

不過,我寧願修復DNS的問題,更喜歡,因爲DNS的IP地址可能隨時改變。

更新:IP地址方法顯然不適用於雅虎新聞RSS提要域。然後,您應該真的使用主機名來修復DNS服務器問題。

+0

謝謝BalusC :)。太好了,你給了ip。現在,DNS本身並沒有出現。但它不起作用。現在我得到這個錯誤: - java.io.FileNotFoundException:http://216.115.98.240/rss/india – TCM 2010-05-25 17:07:52

+0

即使當我輸入「http://216.115.98.240/rss/india」我什麼都沒有。這個IP是否正確?當我做平我得到這個IP 216.115.97.236。然而,在這也是我得到同樣的例外,在Java和瀏覽器也沒有顯示。 – TCM 2010-05-25 17:21:01

2

UnknownHostException指示規定不能轉換爲IP地址的主機。這可能是您的DNS服務器的問題。

+0

好MarkPeters,那麼我應該如何解決這個問題?因爲我必須在大學提交我的工作,而且我不認爲我能夠訪問大學的路由器並更改其中的DNS服務器:( – TCM 2010-05-25 17:22:23

+1

@Nitesh:它在大學的環境中還是僅在本地環境中失敗?如果學校環境不一致,我會同時通知您的老師或導師說可能存在您無法控制的環境問題,並嘗試遊說您的大學IT人員來診斷和解決問題。 您可能會考慮一種方法,在這種情況下,您可以捕獲異常並再次嘗試幾次,也許幾秒/分鐘。 – 2010-05-25 18:01:41

+0

//使用Google免費DNS服務器覆蓋系統DNS設置 System.setProperty(「sun.net.spi.nameservice。 nameservers「,」8.8.8.8「); System.setProperty(」sun.net.spi.nameservice.provider.1「,」dns,sun「); – ACV 2015-09-04 21:24:38

1

如果DNS解析間歇性失敗,捕獲異常,直到你得到名稱解析再試一次。你只能控制,你可以控制什麼...如果你無法控制/修復DNS服務器,請使你的應用足夠強大,以處理古怪的DNS服務器。如果在創建用於遠程方法調用到遠程主機的連接發生的java.net.UnknownHostException