tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von SE
ERLEDIGT
JA
ANTWORTEN
14
ZUGRIFFE
349
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Edgar2010 Edgar2010 ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    22
    Hallo ich habe folgendes Problem und zwar importiere ich durch einen REST Aufruf Fotos aus Flickr und möchte sie in einer Gui anzeigen lassen , es funktioniert das 1 foto angezeigt wird aber nicht mehrere. Hier mal der Code
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    
    public ArrayList<URL> fetchImage() throws Exception{
            
            URLConnection connection = new URL("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=a750a873fbd6a892f2965a8601a0a2be&sort=date-posted-asc&per_page=10&tags=Polizei,Feuerwehr&text=Polizei+Love Parade+Feuerwehr+Katastrophen+Unfälle").openConnection();
            
            DataInputStream dis = new DataInputStream(connection.getInputStream());
            
            FileWriter filewriter = new FileWriter(new File("Photos.xml"));
            
            BufferedReader read=new BufferedReader(new InputStreamReader(dis));
            
            String nextline;
            
            String[] servers = new String[100];
            String[] ids = new String[100];
            String[] secrets = new String[100];
            while ((nextline = read.readLine()) != null) { 
                
                filewriter.append(nextline);
         
                
                // Zeigt mir als String alle Fotos mit Attributen an
                System.out.println(nextline);
            }
            dis.close();
            filewriter.close();
            
            String filename = "Photos.xml";
            XMLInputFactory factory = XMLInputFactory.newInstance();
            //System.out.println("FACTORY: " + factory);
     
            XMLEventReader reader = factory.createXMLEventReader(filename, new FileInputStream(filename));
            int i = 0;
            while (reader.hasNext()) {
     
                XMLEvent event = reader.nextEvent();
                if (event.isStartElement()) {
                    StartElement element = (StartElement) event;
                    String elementName = element.getName().toString();
                    if (elementName.equals("photo")) {
                        i++;
                       
                        Iterator<Attribute> iterator = element.getAttributes();
     
                        while (iterator.hasNext()) {
     
                            Attribute attribute = (Attribute) iterator.next();
                            QName name = attribute.getName();
                            String value = attribute.getValue();
                            //System.out.println("Attribute name/value: " + name + "/" + value);
                            if ((name.toString()).equals("server")) {
                                servers[i] = value;
                                //System.out.println("Server Value" + servers[0]);
                            }
                            if ((name.toString()).equals("id")) {
                                ids[i] = value;
                            }
                            if ((name.toString()).equals("secret")) {
                                secrets[i] = value;
                            }
                        }
                            String flickrurl = "http://static.flickr.com/" + servers[i] + "/" + ids[i] + "_" + secrets[i] + ".jpg"; 
                            URL u = new URL(flickrurl);
                            ArrayList<URL> list=new ArrayList<URL>();
                            list.add(u);
                            System.out.println(u);
                            return list;
                        }
                      }
                   }

    Und hier die Gui Klasse
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    
    public class PhotoApp extends JFrame{
        
        FlickrPhoto photo=new FlickrPhoto();
        
        public PhotoApp() throws Exception  {
            super("Aggregierte Fotos aus Flickr");
            
            Container cont=getContentPane();
        
            JPanel panel1=new JPanel();
            
            //URL url;
            List<URL> imgList = photo.fetchImage();
            //Iterator<URL> it= imgList.iterator();
            //while(it.hasNext()){
                
            //url=it.next();
            //java.net.URL where = url;
            //ImageIcon icon = new ImageIcon(where);
     
            //System.out.println(url);
            
            JLabel label1=new JLabel(new ImageIcon(imgList.get(0)));
            //JLabel label2=new JLabel(new ImageIcon(imgList.get(1)));
            //label1.setIcon(icon);
                        
            panel1.add(label1);
            //panel1.add(label2);
        
            cont.add(panel1,BorderLayout.SOUTH);
            }
        // }      
                        
        
        public static void main(String args[]) {
            
            SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    PhotoApp app = null;
                    try {
                        app = new PhotoApp();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                    app.setSize(600, 600);
                    app.setVisible(true);
                    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                }
            });
        }
                
    }

    Bin für jede Hilfe dankbar. Das Problem muss in der ersten Klasse liegen.
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Hi und Willkommen bei Tutorials.de,

    das Problem was du hast, liegt daran, dass du auf dein 'panel1' kein Layout gesetzt hast. Als default wird glaube ich ein Layout ausgewählt, dass den Inhalt ausfüllt. Sprich wenn du ein zweites Bild in einem neuen JLabel auf das JPanel setzt, wird das erste einfach in den Hintergrund gesetzt/gelöscht.

    Gruß

    Fabio
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  3. #3
    Edgar2010 Edgar2010 ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    22
    Hi danke für die Antwort was meinst du mit Layout setzen? Ich weiß schon das ich mehere Labels benötige um sie in ein Panel zu setzen aber es ist so das mir im Code in der ersten Klasse nur eine URL in die Liste geladen wird und nicht wie angegeben 10 !
     

  4. #4
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Also für die Layouts schaust du dir am besten den Link mal an.
    Das in der Liste nur eine URL enthalten ist, wird höchstwahrscheinlich hier dran liegen:
    Code java:
    1
    2
    3
    4
    5
    6
    
                            String flickrurl = "http://static.flickr.com/" + servers[i] + "/" + ids[i] + "_" + secrets[i] + ".jpg"; 
                            URL u = new URL(flickrurl);
                            ArrayList<URL> list=new ArrayList<URL>();
                            list.add(u);
                            System.out.println(u);
                            return list;
    Da du hier die Liste erzeugst und nur eine URL ('u') hinzufügst.

    ps.: Bitte verwende die Java-Tags, wenn du Code postest.
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  5. #5
    Edgar2010 Edgar2010 ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    22
    Auf der Console wird mir aber zum testen mit System.out.println(u) alle 10 URLs ausgegeben
     

  6. #6
    SE Tutorials.de Gastzugang
    Willkommen beim Tutorials.de
    Da du noch neu bist nehme ich es dir nicht übel das du unsere Java-Tags nicht kennst ...
    In meiner Signatur kannst du deren Verwendung sehen. Warum sind diese besser als CODE-Tags ? Weil du dadurch Syntax-Highlightning hast was die Lesbarkeit enorm erhöt.

    Dessweiteren ist dein Code etwas ... nun ... schlecht formatiert was weiter hinderlich ist.

    Zum Problem selbst :
    Du hast hier einen dicken Struktur Fehler : du erstellst innerhalb der while() ein neues List-Objekt. Das ist schon mal falsch ! Wenn dann müsstest du diese List AUßERHALB der while() erstellen um sie nicht immer wieder zu überschreiben. Und dann machst du gleich den Folgefehler das du diese List , welche zu diesem Zeitpunkt eben nur einen Eintrag enthält dierekt returnst. Dein Code hat also nicht mal die Möglichkeit einen zweiten Eintrag hinzuzufügen ... ganz davon abgesehen das du dann immer wieder eine neue List erzeugen würdest welche von außerhalb der while() nicht mal sichtbar wäre.

    Nach einer re-formatierung und mit richtigen Java-Tags hier mal die Stelle die ich meine

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    
    while(reader.hasNext())
    {
        XMLEvent event=reader.nextEvent();
        if(event.isStartElement())
        {
            StartElement element=(StartElement)event;
            String elementName=element.getName().toString();
            if(elementName.equals("photo"))
            {
                i++;
                Iterator<Attribute> iterator=element.getAttributes();
                while(iterator.hasNext())
                {
                    Attribute attribute=(Attribute)iterator.next();
                    QName name=attribute.getName();
                    String value=attribute.getValue();
                    if((name.toString()).equals("server"))
                    {
                        servers[i]=value;
                    }
                    if((name.toString()).equals("id"))
                    {
                        ids[i]=value;
                    }
                    if((name.toString()).equals("secret"))
                    {
                        secrets[i]=value;
                    }
                }
                String flickrurl="http://static.flickr.com/"+servers[i]+"/"+ids[i]+"_"+secrets[i]+".jpg";
                URL u=new URL(flickrurl);
                ArrayList<URL> list=new ArrayList<URL>(); //erzeugen eines NEUEN List-Objektes bei JEDEM Schleifendurchlauf
                list.add(u); //immer nur EINEN Eintrag adden
                System.out.println(u);
                return list; //dierektes returnen der ERSTEN Liste mit EINEM Eintrag
            }
        }
    }

    Das ist so komplett falsch und führt natürlich nicht zu dem gewünschten Ergenis.
    Ich habe hier mal eine korrigierte Variante die das returnen sollte was du haben willst *auch habe ich die letzte fehlende Block-Klammer hinzugefügt.

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    
    public ArrayList<URL> fetchImage() throws Exception
    {
        URLConnection connection = new URL("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=a750a873fbd6a892f2965a8601a0a2be&sort=date-posted-asc&per_page=10&tags=Polizei,Feuerwehr&text=Polizei+Love Parade+Feuerwehr+Katastrophen+Unfälle").openConnection();
        DataInputStream dis = new DataInputStream(connection.getInputStream());
        FileWriter filewriter = new FileWriter(new File("Photos.xml"));
        BufferedReader read=new BufferedReader(new InputStreamReader(dis));
        String nextline="";
        String[] servers=new String[100];
        String[] ids=new String[100];
        String[] secrets=new String[100];
        while ((nextline=read.readLine())!=null)
        {
            filewriter.append(nextline);
            System.out.println(nextline);
        }
        dis.close();
        filewriter.close();
        String filename="Photos.xml";
        XMLInputFactory factory=XMLInputFactory.newInstance();
        XMLEventReader reader=factory.createXMLEventReader(filename, new FileInputStream(filename));
        int i=0;
        ArrayList<URL> list=new ArrayList<URL>(); //List AUßERHALB der while() damit du auch erstmal überhaupt Zugriff hast , dazu nur EIN List-Objekt
        while(reader.hasNext())
        {
            XMLEvent event=reader.nextEvent();
            if(event.isStartElement())
            {
                StartElement element=(StartElement)event;
                String elementName=element.getName().toString();
                if(elementName.equals("photo"))
                {
                    i++;
                    Iterator<Attribute> iterator=element.getAttributes();
                    while(iterator.hasNext())
                    {
                        Attribute attribute=(Attribute)iterator.next();
                        QName name=attribute.getName();
                        String value=attribute.getValue();
                        if((name.toString()).equals("server"))
                        {
                            servers[i]=value;
                        }
                        if((name.toString()).equals("id"))
                        {
                            ids[i]=value;
                        }
                        if((name.toString()).equals("secret"))
                        {
                            secrets[i]=value;
                        }
                    }
                    String flickrurl="http://static.flickr.com/"+servers[i]+"/"+ids[i]+"_"+secrets[i]+".jpg";
                    URL u=new URL(flickrurl);
                    list.add(u);
                    System.out.println(u);
                }
            }
        }
        return list; //return erst wenn die List komplett erstellt wurde
    }

    Wie du siehst habe ich mir auch die Mühe gemacht deinen Code gemäß den Konventionen zu formatieren.

    Ich hoffe das hilft dir bei der Lösung des Problems. Und ich hoffe auch das du diesen Fehler verstehst und WARUM deine Variante zu dem Fehler geführt hat. Wenn nicht : dann scheue dich nicht nach zu fragen ... wir erklären es dir gerne.
     

  7. #7
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Versuchs mal bitte so. Ich kann nicht dafür garantieren, dass es so klappt, aber ich bin der Meinung, dass da das Problem liegt:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    
        public ArrayList<URL> fetchImage() throws Exception{
     
            URLConnection connection = new URL("http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=a750a873fbd6a892f2965a8601a0a2be&sort=date-posted-asc&per_page=10&tags=Polizei,Feuerwehr&text=Polizei+Love Parade+Feuerwehr+Katastrophen+Unfälle").openConnection();
     
            DataInputStream dis = new DataInputStream(connection.getInputStream());
     
            FileWriter filewriter = new FileWriter(new File("Photos.xml"));
     
            BufferedReader read=new BufferedReader(new InputStreamReader(dis));
     
            String nextline;
     
            String[] servers = new String[100];
            String[] ids = new String[100];
            String[] secrets = new String[100];
            while ((nextline = read.readLine()) != null) { 
     
                filewriter.append(nextline);
     
     
                // Zeigt mir als String alle Fotos mit Attributen an
                System.out.println(nextline);
            }
            dis.close();
            filewriter.close();
     
            String filename = "Photos.xml";
            XMLInputFactory factory = XMLInputFactory.newInstance();
            //System.out.println("FACTORY: " + factory);
     
            XMLEventReader reader = factory.createXMLEventReader(filename, new FileInputStream(filename));
            int i = 0;
            ArrayList<URL> list=new ArrayList<URL>();
            while (reader.hasNext()) {
     
                XMLEvent event = reader.nextEvent();
                if (event.isStartElement()) {
                    StartElement element = (StartElement) event;
                    String elementName = element.getName().toString();
                    if (elementName.equals("photo")) {
                        i++;
     
                        Iterator<Attribute> iterator = element.getAttributes();
     
                        while (iterator.hasNext()) {
     
                            Attribute attribute = (Attribute) iterator.next();
                            QName name = attribute.getName();
                            String value = attribute.getValue();
                            //System.out.println("Attribute name/value: " + name + "/" + value);
                            if ((name.toString()).equals("server")) {
                                servers[i] = value;
                                //System.out.println("Server Value" + servers[0]);
                            }
                            if ((name.toString()).equals("id")) {
                                ids[i] = value;
                            }
                            if ((name.toString()).equals("secret")) {
                                secrets[i] = value;
                            }
                        }
                        String flickrurl = "http://static.flickr.com/" + servers[i] + "/" + ids[i] + "_" + secrets[i] + ".jpg"; 
                        URL u = new URL(flickrurl);
                        list.add(u);
                        System.out.println(u);
                    }
                }
            }
            return list;
        }

    // EDIT: Spike war schneller
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  8. #8
    SE Tutorials.de Gastzugang
    Immer diese verdammten SAME-TIME-Posts xD

    Was mir gerade auffällt :
    Was zur hölle soll das hier eigentlich ?
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    Iterator<Attribute> iterator=element.getAttributes();
    while(iterator.hasNext())
    {
        Attribute attribute=(Attribute)iterator.next();
        QName name=attribute.getName();
        String value=attribute.getValue();
        if((name.toString()).equals("server"))
        {
            servers[i]=value;
        }
        if((name.toString()).equals("id"))
        {
            ids[i]=value;
        }
        if((name.toString()).equals("secret"))
        {
            secrets[i]=value;
        }
    }
    Mal davon abgesehen das "i" außerhalb ALLER schleifen erstellt wird hat das doch so überhaupt keinen Sinn. Aber erlich : da ich nicht weis wie dein Code arbeitet bin ich auch gerade zu faul dir das zu korrigieren.
     

  9. #9
    Edgar2010 Edgar2010 ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    22
    Vielen vielen Dank das sieht ja super aus super Forum seit zwei Stunden such ich nach der Lösung wenn ihr mir jetzt noch verratet wie mir die Bilder es sind 10 Stück in meiner Gui angezeigt bekomme ist heute ein toller Tag
     

  10. #10
    Edgar2010 Edgar2010 ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    22
    Das soll bedeuten das aus meinem XML Dokument die IDs Secrets... ausgelesen werden sollen damit ich daraus eine URL erhalte um die Fotos darzustellen weil die liegen ja auch dem Server von Flickr
     

  11. #11
    SE Tutorials.de Gastzugang
    Ja ... nur iterierst du durch alles durch ... veränderst dabei "i" aber nicht ... heißt du hast nur die letzten Werte ... und selbst wenn es mehrere wären gehst du dann auch nicht durch. Es würde sich hier anbieten innerhalb der Iteration die Links zu adden ... ich glaube dann bekommst du auch deutlich mehr Bilder ... aber da habe ich gerade akute Unlust zu ...

    Zur GUI:
    einfach das hier :
    Code java:
    1
    
    panel1.setLayout(new FlowLayout());
    Das FlowLayout ist das standard-Layout wenn es darum geht möglichst einfach mehrere Elemente anzuzeigen. Das einzige was jetzt noch passieren könnte ist das der Inhalt zu viel für das JFrame ist und du daher nicht alles siehst. Dafür bräuchtest du dann ein JScollPane ... aber ich weis nicht ob du die nötigen Grundlagen dafür drauf hast.
     

  12. #12
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist offline Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    Das habe ich dir schonmal gesagt...
    Zitat Zitat von Fabio Hellmann Beitrag anzeigen
    Also für die Layouts schaust du dir am besten den Link mal an.
    Ohne ein Layout wird das nicht funktionieren.
     
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  13. #13
    Edgar2010 Edgar2010 ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    22
    Danke schonmal für deine Hilfe die Grundlagen zur Gestaltung der Gui kann ich schon es gibt mir im moment nur darum zur Anzeige der Bilder in der Gui, mit dem REST Aufruf in der Flickr API beschränke ich mich zur Zeit auf 10 Bilder, verkleinern kann ich sie später auch es geht erstmal nur zum Test der Darstellbarkeit, weil im moment nur 1 Bild angezeigt wird
     

  14. #14
    Edgar2010 Edgar2010 ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    22
    Danke danke danke ich habs es funkioniert juchhu
     

  15. #15
    SE Tutorials.de Gastzugang
    Makiere den Thread dann bitte als erledigt.
    Ich werde bei gelegenheit mal deinen Iterator da auseinandernehmen das das auch etwas mehr Sinn ergibt ... aber für den Moment : schön das es funtkioniert.
    Edgar2010 bedankt sich. 

Ähnliche Themen

  1. Bilder bei Flickr hochladen
    Von shenmuefreak im Forum Fotografie & Digitalfotografie
    Antworten: 2
    Letzter Beitrag: 17.06.11, 13:26
  2. FlickR Upload nur mit JS und HTML
    Von timi1413 im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 25.11.08, 09:20
  3. Bridge Erweiterung für Flickr ?
    Von Jan-Frederik Stieler im Forum Fotografie & Digitalfotografie
    Antworten: 0
    Letzter Beitrag: 09.10.08, 21:01
  4. Flickr via FAlbum in Wordpress
    Von Tanis im Forum Content Management Systeme (CMS)
    Antworten: 0
    Letzter Beitrag: 25.05.07, 23:07
  5. Flickr Api Bilderupload
    Von kevkev im Forum PHP
    Antworten: 0
    Letzter Beitrag: 13.01.07, 22:07