2013-06-28 38 views
0

我目前使用Apache Commons Net開發我自己的NNTP閱讀器。使用可用的教程,我能夠使用他們的一些代碼來讓我獲得文章。Apache Commons - NNTP - 「Article To List」 - AWT

的代碼我從NNTP節使用 -

System.out.println("Retrieving articles between [" + lowArticleNumber + "] and [" + highArticleNumber + "]"); 
Iterable<Article> articles = client.iterateArticleInfo(lowArticleNumber, highArticleNumber); 

System.out.println("Building message thread tree..."); 
Threader threader = new Threader(); 
Article root = (Article)threader.thread(articles); 
Article.printThread(root, 0); 

我需要的物品,並把它們變成一個列表類型,所以我可以給他們使用像這樣的東西AWT -

List x = (List) b.GetGroupList(dog); 
     f.add(CreateList(x)); 

我的整個代碼庫的這一部分是 -

public void GetThreadList(String Search) throws SocketException, IOException { 

     String hostname = USE_NET_HOST; 
     String newsgroup = Search; 

     NNTPClient client = new NNTPClient(); 
     client.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out), true)); 
     client.connect(hostname); 
     client.authenticate(USER_NAME, PASS_WORD); 

     if(!client.authenticate(USER_NAME, PASS_WORD)) { 
      System.out.println("Authentication failed for user " + USER_NAME + "!"); 
      System.exit(1); 
     } 

     String fmt[] = client.listOverviewFmt(); 
     if (fmt != null) { 
      System.out.println("LIST OVERVIEW.FMT:"); 
      for(String s : fmt) { 
       System.out.println(s); 
      } 
     } else { 
      System.out.println("Failed to get OVERVIEW.FMT"); 
     } 
     NewsgroupInfo group = new NewsgroupInfo(); 
     client.selectNewsgroup(newsgroup, group); 

     long lowArticleNumber = group.getFirstArticleLong(); 
     long highArticleNumber = lowArticleNumber + 5000; 

     System.out.println("Retrieving articles between [" + lowArticleNumber + "] and [" + highArticleNumber + "]"); 
     Iterable<Article> articles = client.iterateArticleInfo(lowArticleNumber, highArticleNumber); 

     System.out.println("Building message thread tree..."); 
     Threader threader = new Threader(); 
     Article root = (Article)threader.thread(articles); 
     Article.printThread(root, 0); 

     try { 
      if (client.isConnected()) { 
       client.disconnect(); 
       } 
      } 
      catch (IOException e) { 
       System.err.println("Error disconnecting from server."); 
       e.printStackTrace(); 
      } 
    } 

和 -

public void CreateFrame() throws SocketException, IOException { 
     // Make a new program view 
     Frame f = new Frame("NNTP Reader"); 
     // Pick my layout 
     f.setLayout(new GridLayout()); 
     // Set the size 
     f.setSize(H_SIZE, V_SIZE); 
     // Make it resizable 
     f.setResizable(true); 
     //Create the menubar 
     f.setMenuBar(CreateMenu()); 
     // Create the lists 
     UseNetController b = new UseNetController(NEWS_SERVER_CREDS); 
     String dog = "*"; 
     List x = (List) b.GetGroupList(dog); 
     f.add(CreateList(x)); 

     //f.add(CreateList(y)); 
     // Add Listeners 
     f = CreateListeners(f); 
     // Show the program 
     f.setVisible(true); 
    } 

我只想把我返回的新聞報道列表發送給AWT顯示器。任何人都可以向我解釋如何將這些文章變成列表?

+0

1)爲了更好地幫助越早,張貼[SSCCE](http://sscce.org/)。 2)請學習常見的[Java命名約定](http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307)(具體用於名稱的情況) ,方法和屬性名稱並一致使用它們。 3)爲什麼是AWT而不是Swing?在[Swing extras over AWT]上看到這個答案(http://stackoverflow.com/a/6255978/418556)有很多很好的理由放棄使用AWT組件。 –

+0

1.好的。 2.問題集中在來自Apache Commons Library的「Article」。爲我自己的變量選擇x或dog是爲了時間目的。他們稍後會改變。 「文章」來自Apache - 如果我們能解決我的問題,我會願意給他們發一封電子郵件,讓他們改變他們的變量名稱,如果這是問題。 3. http://www.pitman.co.za/projects/charva/index.html - 我不想放棄Swing的AWT。我正在尋找使用AWT,所以我可以使用charva。 – ILikeTurtles

+0

手頭的另一個問題;你需要一個新聞服務器帳號才能使用該程序。所以我可以上傳它;但只有有權訪問自己的新聞服務器的人才能運行該程序。 – ILikeTurtles

回答

0

歡迎來到DIY新聞閱讀器俱樂部。我不知道你是否試圖獲得服務器上的新聞組列表或articles.You已經有你的文章在Iterable集合。迭代遍歷它在每篇文章的列表中追加想要的內容。您可能不想在列表視圖中顯示整個文章正文。更可能的消息ID,主題,作者或日期(或組合作爲一個字符串)。例如,對於剛剛科目列表:

... 
Iterable<Article> articles = client.iterateArticleInfo(lowArticleNumber, highArticleNumber); 
Iterator<Article> it = articles.iterator(); 
while(it.hasNext()) { 
    Article thisone = it.next(); 
    MyList.add(thisone.getSubject()); 
    //MyList should have been declared up there somewhere ^^^ and 
    //your GetThreadList method must include List in the declaration 
} 
return MyList; 
... 

我的策略是通過獲取一個迭代的物品與身體的SQLite數據庫,主題,引用等存儲在字段。然後,您可以創建一個按您想要的方式排序的列表,通過主鍵鏈接可以在顯示它們時檢索單個文章所需的內容。另一種策略是一系列message_id或商品編號,並根據需要從新聞服務器中單獨提取每一個。玩得開心 - 尤其是當您爲Android編碼時,並且想要以正確的順序顯示帶有適當縮進和標記的線索消息列表;)。事實上,通過查看開源的Groundhog新聞閱讀器項目(我永遠感激不盡),您可以學到很多東西。

http://bazaar.launchpad.net/~juanjux/groundhog/trunk/files/head:/GroundhogReader/src/com/almarsoft/GroundhogReader