Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

HTML Image Picker - String Filter Problem

Das Thema "HTML Image Picker - String Filter Problem" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 12.08.2011, 10:05   #1 (permalink)
Neuer Benutzer

Modell: HTC Magic

Registriert seit: 12.08.2011
Beiträge: 5
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
Standard HTML Image Picker - String Filter Problem

Hallo zusammen,
ich bin gerade dabei ein ImagePicker zu schreiben nur leider bekomme ich es nicht ganz hin.

Also ich habe vor Webseite X auszulesen und mit von einem bestimmten Bild die src ausgeben zu lassen, damit ich es anzeigen kann.
Der Code durchläuft das HTML soll nach <img src="www.xy.de/lustigesbild.png" /> suchen und mir dann nur www.xy.de/lustigesbild.png zurückgeben...

Das auslesen des HTML funktioniert schon :)

Das Problem ist der RegEx, wenn ich versuche den String zu filtern, damit ich nur die src habe, stürzt die app ab...
Vielleicht hat ja einer von euch eine Idee?

Vielen Dank

Code:
public void onButtonClick(View view) {
        switch (view.getId()) {
        case R.id.sf_aussenwelt_internet_go:
            String text = "";
            String imgRegex = "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";
            
            try {
                URL ucon = new URL("http://www.xyz.de/");
                URLConnection uconn;
                uconn = ucon.openConnection();
                uconn.connect();
                
                InputStream is = uconn.getInputStream();
                
                BufferedReader fileInBuffer =
                        new BufferedReader( new InputStreamReader(is));
                String zeile;
                try {
                    while ((zeile = fileInBuffer.readLine()) != null) {
                        text += zeile;
                    }
                         Pattern p = Pattern.compile(imgRegex);
                         Matcher m = p.matcher(text);

                            if(m.find())
                            {
                                text = m.group(1);
                            }

                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    fileInBuffer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            textEingabe.setText(text);
            
            break;
        }
    }

Geändert von dark staple (12.08.2011 um 10:16 Uhr)
dark staple ist offline   Mit Zitat antworten
Alt 12.08.2011, 10:43   #2 (permalink)
Erfahrener Benutzer

Modell: G1 DevPhone / SGS2 / SGT10.1v

Registriert seit: 20.01.2009
Beiträge: 238
Abgegebene Danke: 7
Erhielt 50 Danke für 47 Beiträge
Standard AW: HTML Image Picker - String Filter Problem

versuch mal den hier:
Code:
<img[^>]src=["']([^'"]*)
Musst noch beachten, dass das Bild auch (vermutlich hauptsächlich) relativ angegeben ist, also beim laden noch das "http://www.xyz.de/" davor schreiben wenn nötig.

edit: Achso, natürlich noch entsprechend die " escapen
- und statt dem "text += zeile;" -> StringBuilder nehmen, geht bei großen Daten deutlich zügiger, als jedesmal nen neues String-Objekt zu erstellen

Geändert von sixi (12.08.2011 um 10:56 Uhr)
sixi ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei sixi für diesen Beitrag:
dark staple (12.08.2011)
Alt 12.08.2011, 11:31   #3 (permalink)
Neuer Benutzer

Modell: HTC Magic

Registriert seit: 12.08.2011
Beiträge: 5
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
Standard AW: HTML Image Picker - String Filter Problem

Also vielen Dank erstmal
Das Funktioniert soweit schon mal ganz gut bei vielen Bildern aber....
<img alt="foo bar foo" data-orig height="558" width="800" id="image" onclick="Note.toggle();" src="xsq.de/bla.png">Das erkennt er leider nicht mehr

Alle anderen Bilder auf der Webseite werden erkannt, nur dieses nicht...

Was genau meintest du mit StringBuilder nehmen?
dark staple ist offline   Mit Zitat antworten
Alt 12.08.2011, 12:12   #4 (permalink)
Erfahrener Benutzer

Modell: G1 DevPhone / SGS2 / SGT10.1v

Registriert seit: 20.01.2009
Beiträge: 238
Abgegebene Danke: 7
Erhielt 50 Danke für 47 Beiträge
Standard AW: HTML Image Picker - String Filter Problem

Oh, es fehlte nen *

Code:
<img[^>]*src=["']([^'"]*)


Statt deinem
Code:
String text;
nimmste 'nen StringBuilder:
Code:
StringBuilder text = new StringBuilder();
dann statt dem "text+=zeile"
Code:
text.append(zeile);
Den gesamten Text kriegste dann per
Code:
text.toString();
Das "Problem" wenn du Strings per += aneinanderfügst ist, dass für jede Zeile eine neues String-Objekt (also das zusammengesetzte) erzeugt wird. Bei vielen Zeilen ist das Recht inperformant :>

mehr dazu Java ist auch eine Insel: StringBuilder/StringBuffer
sixi ist offline   Mit Zitat antworten
Alt 12.08.2011, 12:45   #5 (permalink)
Neuer Benutzer

Modell: HTC Magic

Registriert seit: 12.08.2011
Beiträge: 5
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
Standard AW: HTML Image Picker - String Filter Problem

Also das ist mein aktueller Code, leider findet er immer noch nicht alle Bilder

Vielleicht hat noch jemand eine Idee?

Trotzdem noch mal vielen Dank

Code:
public void onButtonClick(View view) {
        switch (view.getId()) {
        case R.id.sf_aussenwelt_internet_go:
            String adresse = mEditText.getText().toString();
            
            //String imgRegex = "<img[^>]+src\\s*=\\s*['\"]([^'\"]+)['\"][^>]*>";
            String imgRegex = "<img[^>]*src=[\"']([^'\"]*)";
            StringBuilder text = new StringBuilder();
            
            try {
                URL ucon = new URL("xyz.de");
                URLConnection uconn;
                uconn = ucon.openConnection();
                uconn.connect();
                
                InputStream is = uconn.getInputStream();
                
                BufferedReader fileInBuffer =
                        new BufferedReader( new InputStreamReader(is));
                String zeile;
                try {
                    while ((zeile = fileInBuffer.readLine()) != null) {
                        text.append(zeile);
                    }
                         Pattern p = Pattern.compile(imgRegex);
                         Matcher m = p.matcher(text.toString());
                         text.delete(0, text.length());
                            if(m.find())
                            {
                                int i = 0;
                                while(i != m.groupCount()+1)
                                {
                                text.append(m.group(i).replace("<img src=\"", ""));
                                //text.replacereplace("<img src=\"", "");
                                i++;
                                }
                            }

                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    fileInBuffer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            textEingabe.setText(text.toString());
            
            break;
        }
    }
EDIT: While Schleife vergessen...

Geändert von dark staple (12.08.2011 um 17:53 Uhr) Grund: While Schleife vergessen
dark staple ist offline   Mit Zitat antworten
Alt 15.08.2011, 09:10   #6 (permalink)
Neuer Benutzer

Modell: HTC Magic

Registriert seit: 12.08.2011
Beiträge: 5
Abgegebene Danke: 3
Erhielt 0 Danke für 0 Beiträge
Standard AW: HTML Image Picker - String Filter Problem

Lösung:

Code:
private ImageView mImageView;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.aussenwelt_internet);
        mImageView  = 
                (ImageView) findViewById(R.id.sf_aussenwelt_internet_image);
    }

    public void onButtonClick(View view) {
        switch (view.getId()) {
        case R.id.sf_aussenwelt_internet_go:
            String adresse = "http://www.example.de/data/show/8731928534/";
            String imgRegex = ".*src=\"(.+?)\".*";
            String urlString = "";
            
            try {
                URL ucon = new URL(adresse);
                URLConnection uconn;
                uconn = ucon.openConnection();
                uconn.connect();
                
                InputStream is = uconn.getInputStream();
                
                BufferedReader fileInBuffer =
                        new BufferedReader( new InputStreamReader(is));
                String zeile;
                try {
                    while ((zeile = fileInBuffer.readLine()) != null) {
                            Pattern p = Pattern.compile(imgRegex);
                            Matcher m = p.matcher(zeile);
                            if(m.find()) {
                                int i = 0;
                                while(i != m.groupCount()+1)
                                {
                                    // startsWith, damit das richtige  Bild ausgewählt wird, nämlich das Hauptbild das liegt relativ unter  /data/
                                    if(m.group(i).startsWith("/data")) {
                                        urlString = "http://www.example.de" + m.group(i);
                                    }
                                    i++;
                                }
                            }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    fileInBuffer.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            
            try {
                mImageView.setImageDrawable(
                    Drawable.createFromStream(
                            (InputStream) new URL(urlString).getContent(), 
                            "Hauptbild")
                );
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            break;
        }
    }

Geändert von dark staple (15.08.2011 um 09:14 Uhr)
dark staple ist offline   Mit Zitat antworten
Antwort

Stichworte
bild src aus html, image, picker, regex, string

Themen-Optionen
Ansicht


Ähnliche Themen

Thema Autor Forum Antworten Letzter Beitrag
String-Problem (bei Sqlite-query) EcDroid Android App Entwicklung 10 14.06.2011 17:28
Mail HTML Problem padey Samsung Galaxy 551 (I5510) Forum 0 01.02.2011 09:26
Android + HTML 5 Video Problem 1kubik Android App Entwicklung 1 14.01.2011 22:17
Problem mit Zusammensetzung einer HTML-E-Mail plex88 Android App Entwicklung 0 11.01.2011 10:30
String in datei speichern, problem gnometech Android App Entwicklung 2 14.04.2010 15:07




Du liest gerade: "HTML Image Picker - String Filter Problem" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.