HTML Code von Website abrufen

darman96

Aktives Mitglied
Hallo,

ich muss für eine App die ich im moment programmiere den HTML Code einer website abrufen.
Dafür hab ich den Code hier gefunden:

Java:
HttpClient http = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response = http.execute(httpget);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
StringBuilder builder = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null) {
	builder.append(line);
}

sourceCode = builder.toString();
stream.close();

Die App schmiert aber leider immer beim ausführen von httpget ab.
hat jemand ne idee was der fehler ist?
 

Flown

Administrator
Mitarbeiter
http.execute(...) wirft dir eine Exception. Fang die mal ab und lass sie dir ausgeben und poste mal.
 

darman96

Aktives Mitglied
Das Problem ist soweit kommt das Programm gar nicht erst
ich hab um den ganzen block ein Try/Catch aber wenn ich im Catch part was ausgeben will kommt der gar nicht erst da hin.

Java:
try {
        	HttpClient client = new DefaultHttpClient();
        	HttpGet get = new HttpGet("http://www.google.de");
        	HttpResponse response = client.execute(get);		
        	HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
            StringBuilder builder = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null ) {
            	builder.append(line);
            }
            sourceCode = builder.toString();
        } catch (ClientProtocolException e) {
			e.printStackTrace();
			Log.e("ERROR", e.getMessage());
		} catch (IOException e) {
			e.printStackTrace();
			Log.e("ERROR", e.getMessage());
		}
 

Joose

Top Contributor
Füge einen allgemeinen catch Block hinzu (fange alle anderen Exceptions).
Entweder läuft dein Code durch und tut aber nicht dass was du willst oder es fliegt eine Exception die nicht gefangen wird von deinem try/catch.
Der catch Part wird auch erst ausgeführt wenn wirklich eine Exception geflogen ist.
 

darman96

Aktives Mitglied
also es ist so wenn ich die App debugge und am Anfang des Try blocks einen Breakpoint setzte kommt der erst mal bis zu dem punkt und dann bin ich mit Step Over weiter gesprungen. Damit komme ich bis hier :
Java:
HttpResponse response = client.execute(get);
. Wenn ich dann nochmal weisterspringe geht der irgendwo rein und da steht nur noch Source not found. das macht der dann drei vier schritte nochmal und dann schmiert die app komplett ab.
 

dzim

Top Contributor
An dieser Stelle solltest du schon (in der Debug-Ansicht) die Exception sehen. Ansonsten einfach ein
try {...} catch(Exception e) { Log.e("TEST", e.getMessage(), e); }
um das #execute herum.

Egal ob dieser brachiale try-catch-Block oder ordentliches Debuggen: Eigentlich solltest du nach der Zeit den Grund für deine Exception schon gefunden haben...

Hier ein leicht angepasstes Beispiel aus meinen Code - der auch funzt.
Java:
	public static boolean uploadResult(String request, String xml, String referenceServer, int port, String cgiPath, String uploadTarget, String mobileIp) {
		
		HttpParams httpParameters = new BasicHttpParams();
		HttpConnectionParams.setConnectionTimeout(httpParameters, 10000);
		HttpConnectionParams.setSoTimeout(httpParameters, 15000);

		HttpClient httpClient = new DefaultHttpClient(httpParameters);
		HttpPost postRequest = new HttpPost(request);

		try {
			postRequest.setHeader("Content-Type", "application/xml");
			postRequest.setEntity(new StringEntity(xml));
		} catch (UnsupportedEncodingException ue) {
			android.util.Log.e(Utils.class.getSimpleName() + ":uploadResult", "UnsupportedEncodingException while processing XML", ue);
			return false;
		} catch (Exception ue) {
			android.util.Log.e(Utils.class.getSimpleName() + ":uploadResult", "Other Exception while processing XML", ue);
			return false;
		}
		
		android.util.Log.d(Utils.class.getSimpleName() + ":uploadResult", "PostRequestLine :" + postRequest.getRequestLine());
		
		HttpResponse response = null;
		BufferedReader in = null;
		try {
			response = httpClient.execute(postRequest);
			in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()), 4096);
			String line = "";
			while ((line = in.readLine) != null) {
				// do something?
				android.util.Log.d(Utils.class.getSimpleName() + ":uploadResult", line);
			}
			return true;
		} catch (Exception ex) {
			android.util.Log.e(Utils.class.getSimpleName() + ":uploadResult", "Exception while sending results", ex2);
			return false;
		} finally {
			httpClient.getConnectionManager().shutdown();
			if (in != null) {
				try {
					in.close();
				} catch (IOException e) {}
			}
		}
	}
 

darman96

Aktives Mitglied
So hab jetzt mal deinen Code ausprobiert, hab aber den teil mit der xml variable weggelassen weil ich nicht weiß was da rein soll.

Hier der neue Code:
Java:
private void getSourceCode() {
    	
    	HttpParams httpParameters = new BasicHttpParams();
    	HttpConnectionParams.setConnectionTimeout(httpParameters, 10000);
    	HttpConnectionParams.setSoTimeout(httpParameters, 15000);
    	 
    	HttpClient httpClient = new DefaultHttpClient(httpParameters);
    	HttpPost postRequest = new HttpPost("http://www.google.de");
    	HttpResponse response = null;
    	BufferedReader in = null;
    	try {
    		response = httpClient.execute(postRequest);
    		in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()), 4096);
    		String line = "";
    		while ((line = in.readLine()) != null) {
    			// do something?
    		}
    		return;
    	} catch (Exception ex) {
    		Log.e("ERROR", ex.getMessage());
    		return;
    	} finally {
    		httpClient.getConnectionManager().shutdown();
    		if (in != null) {
    			try {
    				in.close();
    			} catch (IOException e) {}
    		}
    	}
    	
    }

und hier was LogCat mir auswirft.

Anhang anzeigen 7113
 

darman96

Aktives Mitglied
okay jetzt bekomm ich ne NetworkingOnMainThread Exception...
Warum muss ich nen extra Thread aufmachen um was im Netzwerk zu machen?
 

dzim

Top Contributor
NetworkingOnMainThreadException ist eigentlich selbstsprechend: Mache Netzwerkoperationen (Sockets oder UrlConnection oder eben Apache HttpClient / OkHttp) nicht auf dem Hauptthread.
Mach es in Services, AsyncTasks oder einfach eben anderen Threads.
 

dzim

Top Contributor
Ach so, zu deiner Frage: Android forciert das mit dem Netzwerk, damit deine UI nicht blockiert. So haut dir die Umgebung gleich auf die Finger, wenn du etwas programmierst, dass das (evtl.) macht. Savvy?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
rafi072001 Java API um HTML Elemente von externen Websiten zu bekommen Android & Cross-Platform Mobile Apps 2
B Android WebView HTML Quelltext auslesen? Android & Cross-Platform Mobile Apps 6
N Datenübermittlung an HTML scirpt? Android & Cross-Platform Mobile Apps 3
F Android WebView HTML Input Android & Cross-Platform Mobile Apps 6
T Android Ergebnis eines XML+XSLT "transform" in eine HTML - Datei schreiben (Android) Android & Cross-Platform Mobile Apps 2
L HTML Seite anzeigen in Handy-Applikation Android & Cross-Platform Mobile Apps 5
N "Schöne" Datatable in Android und setzen von Parametern von Textview im Code Android & Cross-Platform Mobile Apps 5
S onClickListener auf Buttons die im Code erzeugt wurden setzen. Android & Cross-Platform Mobile Apps 8
W Code läuft unter SDK 27 aber nicht SDK 30 Android & Cross-Platform Mobile Apps 17
M QR-Code auslesen mit Tabletkamera Android & Cross-Platform Mobile Apps 3
C Auf Play Store verlinken - Code in einer Extraklasse Android & Cross-Platform Mobile Apps 1
K Android Code so OK? Android & Cross-Platform Mobile Apps 0
C Android Code in mehrere .java verteilen Android & Cross-Platform Mobile Apps 6
S Android Speichern von Informationen in Code oder extern Android & Cross-Platform Mobile Apps 0
M Code effizienter machen Android & Cross-Platform Mobile Apps 16
R Android YouTube Video per Code streamen Android & Cross-Platform Mobile Apps 5
P Brauche Hilfe bei Code Snippet Android & Cross-Platform Mobile Apps 10
L Android Android über Java Code connecten? Android & Cross-Platform Mobile Apps 2
A Android Android-Code.de - Das Android-Entwickler Forum Android & Cross-Platform Mobile Apps 3
R Android Ist das ein akzeptabler Code? Android & Cross-Platform Mobile Apps 7
H Mjpeg Code läuft unter Java jedoch nicht unter Android? Android & Cross-Platform Mobile Apps 11
J Android QR-Code Scanner mit OpenCV/JavaCV Android & Cross-Platform Mobile Apps 1
P J2ME Code-Beispiele Android & Cross-Platform Mobile Apps 2
2 Code ineffizient? Android & Cross-Platform Mobile Apps 6
H HELP! Code verbessern? Android & Cross-Platform Mobile Apps 3
R Android Eine Website-frame in einer App Android & Cross-Platform Mobile Apps 4
A mCommerce: Brauche mobile Version von Website Android & Cross-Platform Mobile Apps 1
M Android Quellcode einer Website Android & Cross-Platform Mobile Apps 7
C PHP Website aufrufen Android & Cross-Platform Mobile Apps 2
M Umlaute im Quellcode einer Website richtig darstellen Android & Cross-Platform Mobile Apps 4
M Quellcode einer Website auslesen Android & Cross-Platform Mobile Apps 5
T Android Einloggen auf Website langsam? Android & Cross-Platform Mobile Apps 2
H Smartphone (Front-)Kamera-Zugriff per Website Android & Cross-Platform Mobile Apps 6
S Android Zugriff auf Website fuers Infos Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben