| |||||||
Das Thema "HTML Image Picker - String Filter Problem" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #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
| 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) |
| | |
| | #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
|
versuch mal den hier: Code: <img[^>]src=["']([^'"]*) 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) |
| | |
| Folgender Benutzer bedankt sich bei sixi für diesen Beitrag: | dark staple (12.08.2011) |
| | #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
|
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? |
| | |
| | #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
|
Oh, es fehlte nen * ![]() Code: <img[^>]*src=["']([^'"]*) Statt deinem Code: String text; Code: StringBuilder text = new StringBuilder(); Code: text.append(zeile); Code: text.toString(); mehr dazu Java ist auch eine Insel: StringBuilder/StringBuffer |
| | |
| | #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
|
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;
}
} Geändert von dark staple (12.08.2011 um 17:53 Uhr) Grund: While Schleife vergessen |
| | |
| | #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
| 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) |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| 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 |