Apache Commons — NNTP — Список статей — AWT

В настоящее время я использую Apache Commons Net для разработки собственного считывателя NNTP. Используя доступный учебник, я смог использовать часть их кода, чтобы позволить мне получать статьи обратно.

Код, который я использую из раздела 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. Может ли кто-нибудь объяснить мне, как превратить эти статьи в список?


person ILikeTurtles    schedule 28.06.2013    source источник
comment
1) Чтобы быстрее получить помощь, опубликуйте SSCCE. 2) Ознакомьтесь с общими соглашениями об именах Java (в частности, случай, используемый для имен) для имен классов, методов и атрибутов и используйте их последовательно. 3) Почему AWT, а не Swing? См. этот ответ на Switch extras over AWT по многим веским причинам отказаться от использования компонентов AWT.   -  person Andrew Thompson    schedule 29.06.2013
comment
1. Хорошо. 2. Вопрос сосредоточен на статье из библиотеки Apache Commons. Выбор x или dog для моих собственных переменных связан со временем. Их меняют позже. Статья исходит от Apache - если мы сможем решить мой вопрос, я буду готов отправить им электронное письмо, чтобы они изменили имена своих переменных, если это проблема. 3. pitman.co.za/projects/charva/index.html - Я не собираюсь отказываться от AWT в пользу Swing. Я хочу использовать AWT, чтобы использовать charva.   -  person ILikeTurtles    schedule 01.07.2013
comment
Другой вопрос под рукой; вам нужна учетная запись сервера новостей, чтобы использовать программу. Так что я могу загрузить его; но запустить программу могли только люди, имеющие доступ к собственному серверу новостей.   -  person ILikeTurtles    schedule 01.07.2013


Ответы (1)


Добро пожаловать в клуб читателей новостей своими руками. Я не уверен, пытаетесь ли вы получить список телеконференций на сервере или статьи. У вас уже есть статьи в повторяемой коллекции. Перебирайте его, добавляя то, что вы хотите в список из каждой статьи. Вы, вероятно, не захотите отображать все тело статьи в виде списка. Скорее всего, идентификатор сообщения, тема, автор или дата (или комбинация в виде строки). Например, для списка только предметов:

...
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

person PSF    schedule 28.11.2014