HTML Seite nach einem Wort durchsuchen

  • 6 Antworten
  • Letztes Antwortdatum
MrOctron

MrOctron

Neues Mitglied
0
Hallo zusammen,

ich hatte mal ein Java Programm geschrieben, mit dessen Hilfe ich in einer Internetseite nach einem Wort zwischen zwei Wörtern suchen konnte. Dieses Programm versuche ich jetzt für Android zu portieren, aber es klappt leider nicht so einfach wie ich es mir vorgestellt habe.

Hier der Code:

Code:
public class MainActivity extends Activity {

	private WebView webView;
	String data;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		webView = (WebView) findViewById(R.id.webView1);

		webView.getSettings().setJavaScriptEnabled(true);
		webView.getSettings().setLoadWithOverviewMode(true);
		webView.getSettings().setUseWideViewPort(true);

		
		String imgname = getImageName();
		webView.loadUrl("http://www.meineSeite.com" + imgname + ".jpg");
	}

	public String getImageName() {
		try {
			InputStream content = null;
			HttpGet httpGet = new HttpGet("http://www.meineSeite.com");
			HttpClient httpclient = new DefaultHttpClient();
			// Execute HTTP Get Request
			HttpResponse response = httpclient.execute(httpGet);
			content = response.getEntity().getContent();
			BufferedReader rd = new BufferedReader(new InputStreamReader(content), 4096);
			String line;
			StringBuilder sb = new StringBuilder();
			while ((line = rd.readLine()) != null) {
				sb.append(line);
			}
			data = sb.toString();
			rd.close();
			content.close();			
		} catch (Exception e) {
			// TODO: handle exception
		}

		Pattern p = Pattern.compile("erstesWort(.*?)zweitesWort");
		Matcher m = p.matcher(data);
		String imgname = "";
		if (m.find()) {
			imgname = m.group(1);
		}
		return imgname;
	}
}

Die App stürzt beim Start sofort ab.
 
Zuletzt bearbeitet:
Versuchst du im UI-Thread einen Netzwerkcall zu machen?
 
Die App durchsucht die Seite nach dem Namen eines Bildes und soll muss das Bild dann in der WebView anzeigen. Wenn ich der WebView den Link im Code direkt übergebe, dann wird das Bild angezeigt, aber sobald ich diesen Code verwende, startet die App nicht mal.:confused2:

Der ursprüngliche Beitrag von 21:35 Uhr wurde um 21:46 Uhr ergänzt:

Hier der Komplette Fehlercode:

Code:
02-24 23:41:47.427: E/AndroidRuntime(4571): FATAL EXCEPTION: main
02-24 23:41:47.427: E/AndroidRuntime(4571): Process: de.mroctron.downloader, PID: 4571
02-24 23:41:47.427: E/AndroidRuntime(4571): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.mroctron.downloader/de.mroctron.downloader.MainActivity}: java.lang.NullPointerException
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at android.app.ActivityThread.access$800(ActivityThread.java:135)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at android.os.Handler.dispatchMessage(Handler.java:102)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at android.os.Looper.loop(Looper.java:136)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at android.app.ActivityThread.main(ActivityThread.java:5017)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at java.lang.reflect.Method.invokeNative(Native Method)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at java.lang.reflect.Method.invoke(Method.java:515)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at dalvik.system.NativeStart.main(Native Method)
02-24 23:41:47.427: E/AndroidRuntime(4571): Caused by: java.lang.NullPointerException
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at java.util.regex.Matcher.reset(Matcher.java:177)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at java.util.regex.Matcher.<init>(Matcher.java:90)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at java.util.regex.Pattern.matcher(Pattern.java:297)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at de.mroctron.downloader.MainActivity.getImageName(MainActivity.java:63)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at de.mroctron.downloader.MainActivity.onCreate(MainActivity.java:36)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at android.app.Activity.performCreate(Activity.java:5231)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
02-24 23:41:47.427: E/AndroidRuntime(4571): 	... 11 more
 
Zuletzt bearbeitet:
Poste die Fehlermeldung, den Rest vom relevanten Code und setze deinen Code in einen Asynctask oder besser noch in einen volley request.
 
  • Danke
Reaktionen: MrOctron
zeig mal die onCreate-Methode, da wird der Fehler ausgelöst. Das mit dem AsyncTask von JustinTime stimmt ebenfalls. In Android darfst du keine Netzwerk-Operationen mehr im Haupt-Thread ausführen (ausser deine targetSdkVersion ist tief genug). Aber das würde ich mal in einem nächsten Schritt machen, erstmal die NullPointerException.

Es wäre möglich, dass du dir eine View mit findViewById suchst, die es nicht gibt (z.B. falsche ID). Aber am besten zeigst du mal die ganze Methode.
 
Ich habe den kompletten Code im ersten Beitrag aktualisiert.
Ich muss jedoch auch gesteht, dass ich Programmieranfänger bin. Hatte zwar den Grundkurs Programmieren in Java im Studium gehabt, aber das ist auch schon fast 5 Jahre her :)
 
hmm die NullpointerException wird im Matcher geworfen.

Ich würde sage "data" ist null, aber wenn ich mich nicht irre kann stringbuilder.ToString() nicht null zurück geben sondern man bekommt einen leeren string zurück.

Aber der Fehler tritt wenn ich das richtig sehe hier auf:
Matcher m = p.matcher(data);
also kann eigentlich nur data falsch sein.

Welche Android Version nutzt du?
Dann kannst du mal in die Sources davon gucken was genau dort den NullPointer verursacht.

HttpResponse response = httpclient.execute(httpGet);

Hier passiert der erste Fehler und da fliegt die Exception, da du aber alle abfängst

EDIT:
Gerade mal durch die Sourcen geguckt.
Und jetzt erst gesehen, dass du einfach ALLE Exceptions abfängst und nichts damit machst! (böse Sache)
Bei dir is data = null dann kommt der Fehler

Warum?
Weil du im UI Thread versuchst eine Netzwerkoperation auszuführen.
Wenn du nicht einfach alle Exceptions abfangen würdest, würdest du das auch sehen da dann die richtige Exception im Log stehen würde
Im Moment passiert da folgendes:
// TODO: handle exception

Also nichts, aber data = sb.toString() wird niemals ausgeführt.
Damit ist data weiterhin null und dein Fehler kommt hoch.

Guck dir das hier mal an:
http://developer.android.com/reference/android/os/AsyncTask.html
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: MrOctron
Zurück
Oben Unten