# Java List ausgeben



## Fr34k9 (23. Mai 2011)

Huhu, bin mehr oder weniger Anfänger, konnte es bereits, jetzt jedoch nicht mehr^^
Habe keinen Plan mehr =( Aber egal.

Ich möchte ein RSS-Feed Programm machen, daher RSS-Feeds auszugeben. Ich schaffe es auch ohne Probleme die Feeds herunterzuladen und dann nur die Sachen im XML "<title>" auszugeben. Dann jedoch wenn ich noch "<description>" machen muss geht nix mehr, sobald ich mit einer Liste arbeite.

Code: (RssFeed.java)

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rssfeed;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
/**
 *
 * @author ~Z~
 */
public class RssFeed {

    /**
     * @param args the command line arguments
     */
    List myNews;
    Document doc;

    public RssFeed(){
	myNews = new ArrayList();
    }

    public void runExample(){
	parseXML("http://ticker.gulli.com/rss");
	parseXML("http://www.20min.ch/rss/rss.tmpl?type=channel&get=9");
	printData();
    }

    private void parseXML(String NewURL){
	try {
	    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
	    URL url = new URL(NewURL);
	    Document doc = builder.parse(url.openStream());
	    NodeList nodes = doc.getElementsByTagName("item");
	    if(nodes != null && nodes.getLength() > 0){
		for (int a = 0; a < nodes.getLength(); a++) {
		    Element el = (Element)nodes.item(a);
		    String title = getTextValue(el,"title");
		    String description = getTextValue(el,"description");
		    News i = new News(title,description);

		    myNews.add(i);
		}
	    }
	    } catch(ParserConfigurationException pce) {
	        pce.printStackTrace();
	    }catch(SAXException se) {
		se.printStackTrace();
	    }catch(IOException ioe) {
	        ioe.printStackTrace();
	    }
	}

    private String getTextValue(Element ele, String tagName){
	String textVal = null;
	NodeList nodes = ele.getElementsByTagName(tagName);
	if(nodes != null && nodes.getLength() > 0){
	    Element el = (Element)nodes.item(0);
	    textVal = el.getFirstChild().getNodeValue();
	}
	return textVal;
    }

    private void printData(){
	System.out.println("Einträge: '" + myNews.size() + "'");
	Iterator it = myNews.iterator();
	while(it.hasNext()) {
	    Object i = it.next();
	    System.out.println(i);
	}
    }

    public static void main(String[] args){
	RssFeed dpe = new RssFeed();
	dpe.runExample();
	System.out.println();
    }
}
```

Code: (News.java)

```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rssfeed;

/**
 *
 * @author ~Z~
 */
class News {
    private String title;
    private String description;

    public News(String title, String description) {
	this.title = title;
	this.description = description;
    }

}
```

Ausgabe:

```
run:
Einträge: '45'
rssfeed.News@46ae506e
rssfeed.News@5e228a02
rssfeed.News@2d92b996
rssfeed.News@7bd63e39
rssfeed.News@2e8f4fb3
rssfeed.News@42b988a6
rssfeed.News@22ba6c83
rssfeed.News@7d2a1e44
rssfeed.News@5829428e
rssfeed.News@7cd0a5d9
rssfeed.News@66388993
rssfeed.News@9d04653
rssfeed.News@48b8f82d
rssfeed.News@67ad77a7
rssfeed.News@2d8aaa1e
rssfeed.News@6aa6aeed
rssfeed.News@6526804e
rssfeed.News@42b1b4c3
rssfeed.News@20d2906a
rssfeed.News@60072ffb
rssfeed.News@77df38fd
rssfeed.News@6016a786
rssfeed.News@6f507fb2
rssfeed.News@defb836
rssfeed.News@7526e85f
rssfeed.News@4d61f10f
rssfeed.News@59193779
rssfeed.News@68916a2
rssfeed.News@122ce908
rssfeed.News@4277158a
rssfeed.News@1827391d
rssfeed.News@3716ab4e
rssfeed.News@3148aa23
rssfeed.News@1999f91c
rssfeed.News@4bb1aa65
rssfeed.News@7d29f3b5
rssfeed.News@4d3f3045
rssfeed.News@6f7a29a1
rssfeed.News@3d434234
rssfeed.News@aaf8358
rssfeed.News@8d80be3
rssfeed.News@1ff4689e
rssfeed.News@67006d75
rssfeed.News@4d125127
rssfeed.News@6d8dfef8

BUILD SUCCESSFUL (total time: 4 seconds)
```

Hoffe jemand kann mir helfen =)

Greetz
PS: First Post! =)


----------



## deepthroat (23. Mai 2011)

Hi.

Verwendest du denn noch Java 1.4? Seit Java 1.5 verwendet man generische Klassen (List<News>).

Du müßtest die toString Methode der News Klasse überschreiben.

Gruß


----------



## Fr34k9 (23. Mai 2011)

Öhm, wenn du mir sagst wo ich das nachsehe welches Java ich habe kann ich es dir sagen =)
Ausserdem, kannst du mir sagen wie ich dies machen sollte? Ich habe dies nach einer Anleitung versucht zu machen und noch grössere Teile selbst eingebaut.

Greett


----------



## vfl_freak (24. Mai 2011)

Moin,

na, in der Java-Konsole in der Systemsteuerung !

Gruß
KLaus


----------



## Fr34k9 (24. Mai 2011)

Build 1.6 =)
Aber nun zurück zum Problem, wie schaff ich es denn nun die Beschreibung zu bekommen?

Greetz


----------



## deepthroat (24. Mai 2011)

Hi.

Wie schon gesagt, du könntest die toString Methode der News Klasse überschreiben:

```
class News {
   ...

   @Override
   public String toString() {
      return this.title + "\n-- " + this.description;
   }
}
```
Du könntest auch Getter Methoden in der News Klasse implementieren.

Gruß


----------



## Fr34k9 (24. Mai 2011)

Also das mit dem toString funktioniert =)
Das mit der Getter methode funktioniert jedoch nicht. Und dies bräuchte ich eigentlich... Wie die Getter gehen weiss ich, nur wo muss ich was einfügen dass das dann auch geht?


----------



## deepthroat (24. Mai 2011)

Fr34k9 hat gesagt.:


> Das mit der Getter methode funktioniert jedoch nicht. Und dies bräuchte ich eigentlich... Wie die Getter gehen weiss ich, nur wo muss ich was einfügen dass das dann auch geht?


Erstmal solltest du statt List eine List<News> verwenden.

```
List<News> myNews;

...

    myNews = new ArrayList<News>();
```
Dann kannst du über die ganzen News iterieren und die Informationen die du möchtest ausgeben:

```
for (News n: myNews) {
  System.out.println(n.getTitle());
  ...
}
```
Gruß


----------



## Fr34k9 (24. Mai 2011)

Wehooo funktioniert******

Dake danke! *Danke button drück*


----------



## Fr34k9 (24. Mai 2011)

Hmmm, kurze Frage. Wie kann ich nur 1 Eintrag anzeigen lassen? Zbs. Eintrag Nummer 3? ;D

Greetz


----------



## deepthroat (24. Mai 2011)

Fr34k9 hat gesagt.:


> Hmmm, kurze Frage. Wie kann ich nur 1 Eintrag anzeigen lassen? Zbs. Eintrag Nummer 3? ;D


Schau doch mal in die Doku: http://download.oracle.com/javase/6/docs/api/java/util/List.html#size()

und

http://download.oracle.com/javase/6/docs/api/java/util/List.html#get(int)

Gruß


----------



## Fr34k9 (24. Mai 2011)

Das ist nicht das Problem.
for (News newsItem: myNews) {

Dort hatten wir das so gemacht, dass ich newsItem.get(2) machen könnte. Nur geht das ja nicht ohne diese Zuweisung. Wo mache ich denn die Zuweisung ohne die For-Schleife?


----------



## vfl_freak (24. Mai 2011)

Moin,



Fr34k9 hat gesagt.:


> Das ist nicht das Problem.
> for (News newsItem: myNews) {
> 
> Dort hatten wir das so gemacht, dass ich newsItem.get(2) machen könnte. Nur geht das ja nicht ohne diese Zuweisung. Wo mache ich denn die Zuweisung ohne die For-Schleife?


 
Warum nicht einfach

```
myNews.get( 2 );
```



Gruß
KLaus


----------



## Fr34k9 (24. Mai 2011)

Weil dann nur das Object ausgegeben wird. =)


----------



## deepthroat (24. Mai 2011)

Fr34k9 hat gesagt.:


> Weil dann nur das Object ausgegeben wird. =)




```
if (myNews.size() > 3)
  System.out.println(myNews.get(3).getTitle());
```
Gruß


----------



## MiMi (24. Mai 2011)

Schau dir die Grundlagen mal ein wenig genauer an. Mit get(3) bekommst du auch das Objekt wie du bereits selbst sagtest. Wenn du das Objekt hast, kannst du alle getterMethoden aufrufen um an deine gewuenschte Information zu kommen.


----------

