AsyncTask - Ergebnis überprüfen

N

Nono

Neues Mitglied
1
Hallo zusammen,

ich benutze eine AsyncTask Klasse um eine PHP Datei auf meinem Webserver auszuführen. Hier ist der Code der Klasse:

Code:
private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
	@Override
	protected String doInBackground(String... urls) {
		String response = "";
		for (String url : urls) {
			DefaultHttpClient client = new DefaultHttpClient();
			HttpGet httpGet = new HttpGet(url);
			try {
				HttpResponse execute = client.execute(httpGet);
				InputStream content = execute.getEntity().getContent();

				BufferedReader buffer = new BufferedReader(
							new InputStreamReader(content));
				String s = "";
				while ((s = buffer.readLine()) != null) {
					response += s;
				}

			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return response;
	}

	@Override
	protected void onPostExecute(String result) {
		tvHidden.setText(result);
	}
}

Ich möchte jetzt in einer Methode einen String an die PHP Datei übergeben. Das mache ich so:

Code:
public boolean nameCheck(String username) {
	DownloadWebPageTask task = new DownloadWebPageTask();
	task.execute(new String[] { "http://meineseite.net/namecheck.php?name=" + username });
	if(tvHidden.getText().toString() == "true"){
		// Username verfügbar
		return true;
	}
	// Username vergeben
	return false;
}

Die PHP Datei gibt dann entweder false oder true zurück. Ich möchte jetzt wissen wie ich in der Methode nameCheck auf das Ergebnis zugreifen kann. Wie ihr seht habe ich versucht es mit einem versteckten TextView zu machen. Also es gibt ein TextView mit visibility = gone und in der Methode onPostExecute soll der Text des TextView das Ergebnis werden. Und in der Methode nameCheck soll dann überprüft werden ob der Text des TextViews gleich true ist. Aber das klappt bei mir nicht. Ich habe mir zum Test nach dem Ausführen von nameCheck den Inhalt des versteckten Textes ausgeben lassen und dieser ist leer. Also woran kann das liegen? Bzw gibt es eine bessere Variante auf das Ergebnis zuzugreifen?

Viele Grüße

PS: Das ist mein erstes Projekt, also bin noch Neuling :winki:
 
Erstmal Herzlich Willkommen

Eine Sache vorweg. Der HTTPClient ist deprecated und du solltest lieber eine HttpURLConnection benutzen.

Der AsyncTask wird parallel zum Main Thread ausgeführt.
Vermutlich arbeitet dein Main Thread die if Abfage schon ab, bevor der AsyncTask, über haupt fertig ist.

Eine Möglichkeit wäre es, die if-Abfage in eine eigene Methode auszulagern. Diese Methode kannst du dann in onPostExecute aufrufen und das Ergebnis als Parameter mitgeben. Dann sparst du dir auch diesen hidden TextView. Du Solltest sowieso keine TextViews verwenden um einen String nur abzulegen, wenn du Ihn nicht auch anzeigen willst.
 
Ok danke erstmal.

kosmus schrieb:
Eine Sache vorweg. Der HTTPClient ist deprecated und du solltest lieber eine HttpURLConnection benutzen.

Ich habe die Klasse so aus einem Tutorial übernommen. Ich habe gerade mal nachgeguckt und auf einer anderen Seite stand etwas ganz anderes in der doInBackground Methode. Was genau muss eigentlich darein? Bzw muss die Methode überhaupt überschrieben werden?
 
ASyncTask ist eine Klasse die alles implementiert was man braucht um eine Aufgabe parallel zum Main Thread ausführen und diesen ggf über den Fortschritt und das Ergebnis zu informieren.

Download über http ist nur eine Anwendungsmöglichkeit. Die doInBackground Methode muss auf jeden Fall überschreiben werden.

Der HttpClient funktioniert grundsätzlich, ist aber veraltet und nicht zukunftssicher.

Wie man ein Http Request mittelst HttpURLConnection macht wurde hier im Forum schon öfter erklärt (ich habe es mindestens schon zwei mal erklärt und ich war nicht einzige)
 

Ähnliche Themen

B
Antworten
3
Aufrufe
1.315
swa00
swa00
M
Antworten
8
Aufrufe
1.697
swa00
swa00
Zurück
Oben Unten