| |||||||
Das Thema "Quellcode auslesen .. Schleife ?!" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Junior Mitglied Registriert seit: 07.02.2011
Beiträge: 31
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
| Ich will den Quellcode einer Seite auslesen (z.B. Google.de), um danach etwas herauszufiltern.. Es soll ungefähr so funktionieren: Schleife{ Quellcode auslesen; Quellcode filtern; Das herausgefilterte ausgeben; } Ich versuche den Quellcode so auszulesen: Code: public static String makeRequest(String path) throws Exception {
final String TAG = "HttpClient"; //Used in logging etc.
String str = "";
try {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpost = new HttpGet(path);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
str = (String) httpclient.execute(httpost, responseHandler);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return str;
} ICH BIN TOTAL VERZWEIFELT !!! Ich stecke seit knapp einer Woche bei dem Problem. Kann mir Bitte wer einen Tipp geben ? lg lucaaAUT , Danke |
| | |
| | #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
| Zitat:
So in etwa sollte es funktionieren: Code: private class DownloadFilesTask extends AsyncTask<URL, Void, String> {
protected String doInBackground(URL... urls) {
return makeRequest(urls[0]);
}
protected void onPostExecute(String... result) {
#result anzeigen lassen
}
}
...
AsyncTask t = new DownloadFilesTask();
t.execute(deineURL); | |
| | |
| | #3 (permalink) |
| Junior Mitglied Registriert seit: 07.02.2011
Beiträge: 31
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
Hallo, Danke für die Antwort. Ich bin leider neu in Java und kann desshalb nicht so viel mit dem Code anfangen ![]() Eine neue Class erstellen mit dem Namen "DownloadFilesTask" und dem Code Code: private class DownloadFilesTask extends AsyncTask<URL, Void, String> {
protected String doInBackground(URL... urls) {
return makeRequest(urls[0]);
}
protected void onPostExecute(String... result) {
#result anzeigen lassen
}
} und im Hauptprogramm Code: AsyncTask t = new DownloadFilesTask(); t.execute(deineURL); ))lg |
| | |
| | #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
|
Das ist eine Möglichkeit. Du kannst das ganze auch als "Anonyme Inline Klasse" verwenden (tue ich immer, wenn der AsyncTask nur an einer Stelle genutzt wird): Code: AsyncTask myTask = new AsyncTask<URL, Void, String>(){
...
}.execute(); Allgemein sehr zu empfehlen: Android:Responsiveness sowie der Rest der "Best Practices". Dort wird die UI-Thread Problematik erklärt. |
| | |
| | #5 (permalink) |
| Fortgeschrittenes Mitglied Modell: Samsung Galaxy S und Galaxy 5 Registriert seit: 31.03.2011
Beiträge: 480
Abgegebene Danke: 35
Erhielt 89 Danke für 73 Beiträge
|
Warum hast Du eigentlich einen neuen Thread aufgemacht, wo dein anderer doch gerade erst ein paar Tage alt ist? Quellcode auslesen funktioniert, aber nicht in Schleife ?! Der Weg über die inner Klasse ist wesenlich bequemer, weil diese dann auf die Variablen des sie beinhaltenden Objektes zugreifen kann. So ist es leichter, mit View elementen zu interagieren. |
| | |
| | #6 (permalink) |
| Junior Mitglied Registriert seit: 07.02.2011
Beiträge: 31
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
Hallo, Okay ich bin jetzt einen kleinen Schritt weiter. Code: public class Test_httpclientActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
AsyncTask myTask = new AsyncTask<URL, Void, String>(){
protected String doInBackground(URL... urls) {
return makeRequest(urls[0]); // <- Fehler
}
protected void onPostExecute(String... result) {
Toast.makeText(Test_httpclientActivity.this,"FERTIG", Toast.LENGTH_SHORT).show();
}
}.execute();
public static String makeRequest(URL urls) throws Exception {
final String TAG = "HttpClient";
String str = "";
try {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpost = new HttpGet(urls); // <- Fehler
ResponseHandler<String> responseHandler = new BasicResponseHandler();
str = (String) httpclient.execute(httpost, responseHandler);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return str;
}
} Kann den Code einer erklären ? Dafür wäre ich echt dankbar ![]() Will ihn ja verstehen auch :P lg |
| | |
| | #7 (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
|
1. übergibst du der "execute()"-Methode keine Parameter - die erwartet "URL... urls", also ein Array von URLs --> NullPointer urls[0] sowie HttpGet(urls); 2. wirst du 'nen problem kriegen, wenn du den AsyncTask so als Klassenvariable deklarierst, da er vor der "onCreate" ausgeführt wird -> sobald du auf ein Textview schreibst wird dieses null sein, da das Layout noch nich gesetzt ist --> schieb den ganzen Block hoch in die onCreate-Methode |
| | |
| Folgender Benutzer bedankt sich bei sixi für diesen Beitrag: | lucaaAUT (03.09.2011) |
| | #8 (permalink) |
| Junior Mitglied Registriert seit: 07.02.2011
Beiträge: 31
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
Gut, Also wenn ich das richtig verstanden habe sollte das so Aussehen? Code: public class Test_httpclientActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AsyncTask myTask = new AsyncTask<URL, Void, String>(){
protected String doInBackground(URL... urls) {
return makeRequest(urls[0]);
}
protected void onPostExecute(String... result) {
Toast.makeText(Test_httpclientActivity.this,"FERTIG", Toast.LENGTH_SHORT).show();
}
}.execute(urls[0]);
}
public static String makeRequest(URL urls) throws Exception {
final String TAG = "HttpClient";
String str = "";
try {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpost = new HttpGet(urls[0]);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
str = (String) httpclient.execute(httpost, responseHandler);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
return str;
}
} lg |
| | |
| | #9 (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
|
Das Ergebnis ist ja das von dem makeRequest-Aufruf. Also entweder hast du es in dem doInBackground (returnst es da aber sofort weiter an die onPostExecute). Dort steht es in result[0]. Sinnvoll wäre es halt noch den Quellcode in der doInBackground oder direkt in deiner makeRequest zu verarbeiten (außer du willst den reinen Quellcode irgendwo anzeigen, aber ich geh mal davon aus, dass du nur Teile davon verwenden willst), da du dich an den Stellen noch in einem Thread im Hintergrund bewegst. Würdest du es in der onPostExecute-Methode machen, dann kriegst du unter Umständen Probleme mit laggender UI |
| | |
| Folgender Benutzer bedankt sich bei sixi für diesen Beitrag: | lucaaAUT (03.09.2011) |
| | #10 (permalink) |
| Junior Mitglied Registriert seit: 07.02.2011
Beiträge: 31
Abgegebene Danke: 6
Erhielt 0 Danke für 0 Beiträge
|
Hallo, Danke das du mir hilfst ![]() Okay ich werde den Quellcode gleich in der makeRequest Funktion bearbeiten. (Da der Code zu lang wäre um ihn hier zu posten werde ich ihn mit "// Quellcode bearbeiten") abkürzen: Code: public class Test_httpclientActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AsyncTask myTask = new AsyncTask<URL, Void, String>(){
protected String doInBackground(URL... urls) {
return makeRequest(urls[0]);
}
protected void onPostExecute(String... result) {
Toast.makeText(Test_httpclientActivity.this, result[0] , Toast.LENGTH_SHORT).show();
}
}.execute(urls[0]); <- FEHLER(1)
}
public static String makeRequest(URL urls) throws Exception {
final String TAG = "HttpClient";
String str = "";
try {
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httpost = new HttpGet(urls[0]); <- FEHLER(2)
ResponseHandler<String> responseHandler = new BasicResponseHandler();
str = (String) httpclient.execute(httpost, responseHandler);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
/*
* Quellcode bearbeiten! Code blablabla
*/
return str;
}
} FEHLER(2) = "The type of the expression must be an array type but it resolved to URL" Okay langsam versteh ich das ganze schon... Es ist logisch. Nur was die 2 Fehler bedeuten weiß ich nicht O.o Kannst du mir da weiterhelfen? |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Kernel Quellcode | codeworkx | Cat StarGate Forum | 14 | 08.09.2011 21:26 |
| Quellcode auslesen funktioniert, aber nicht in Schleife ?! | lucaaAUT | Android App Entwicklung | 10 | 28.08.2011 11:41 |
| Quellcode | Boyerkeil | Samsung Galaxy S (I9000) Forum | 3 | 15.08.2010 21:30 |
| Reboot schleife | Darkseth | Motorola Milestone Forum | 5 | 08.08.2010 00:21 |
| CM 5.08 flash. Bootscreen in Schleife | Katz@Magic | Root / Hacking / Modding für HTC Magic | 0 | 16.07.2010 12:32 |