Um aktiv im Android Forum teilnehmen zu können, musst Du Dich bei AndroidPIT registriert haben.
Erik Sattelmair ![]() Rang: Android Junior Beiträge: 10 Eintrittsdatum: 08.02.2012 |
Probleme mit AsyncTask verfasst am 09.02.2012 18:03:05
Hallo liebe Androide-Gemeinde.
Ich habe ein Problem mit dem Thema AsyncTask. Ich habe eine Klasse, die von AsyncTask abgeleitet ist und nichts anderes macht, als einen Progressdialog anzuzeigen. In der doInBackground-Methode rufe ich dann führe ich dann eine Ecectue-Befehl einer anderen, von AsyncTask abgeleiteten Klasse, welche einen Webserveraufruf startet und mir Daten als String zurückliefert. Vor diesem Befehl setze ich den aktuellen Thread auf wait(). Sollte es einen Fehler geben (keine Internetverbindung), starte ich in der aufrufenden Klasse die get()-Methode und setze sie auf 7 Sekunden. Danach ruft der aufgerufene Thread die notify()-Methode auf und es geht weiter. Problem: Es scheint, als ob der aufgerufene Thread gar nicht erst startet. Woran kann das liegen?? Hier mein Code: Aufrufende Klasse: protected synchronized ProgressDialog doInBackground(String... params) { getConnection = new GetConnection(ergebnis, info); getConnection.execute(params); try { wait(); getConnection.get(7,TimeUnit.SECONDS); getConnection.notify(); } catch (InterruptedException e1) { new AlertDialog.Builder(ergebnis).setMessage(R.string.connection_failed_dialog).setNeutralButton(R.string.error_button, null).show(); } catch (ExecutionException e) { new AlertDialog.Builder(ergebnis).setMessage(R.string.connection_failed_dialog).setNeutralButton(R.string.error_button, null).show(); } catch (TimeoutException e) { new AlertDialog.Builder(ergebnis).setMessage(R.string.connection_failed_dialog).setNeutralButton(R.string.error_button, null).show(); } Aufgerufene Klasse: public class GetConnection extends AsyncTask<String, Integer, String>{ private ErgebnisDialogActivity ergebnisDialog; private TarifInformation info; // private ProgressDialog progress; private String results; private HttpClient httpClient; private HttpGet httpGet; private HttpResponse response; // -------------- Aufbau der Connection zum Server, welcher in der URL refferenziert wird ---------------- // -------------- Connection wird im Hintergrund aufgebaut (doInBackground()) ---------------- public GetConnection(ErgebnisDialogActivity ergebnisDialog, TarifInformation info){ this.ergebnisDialog = ergebnisDialog; this.info = info; } // @Override // protected void onPreExecute(){ // progress = new ProgressDialog(ergebnisDialog,ProgressDialog.STYLE_SPINNER); // progress.setMessage("Bitte warten..."); // progress.show(); // } @Override protected String doInBackground(String... params) { httpClient = new DefaultHttpClient(); httpGet = new HttpGet(params[0]); try { response = httpClient.execute(httpGet); InputStream in = response.getEntity().getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder sb = new StringBuilder(); String line; while((line = reader.readLine()) != null){ sb = sb.append(line).append("\n"); } in.close(); results = sb.toString(); return results; } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return "ERROR"; } @Override protected void onPostExecute(String res){ Intent intent = new Intent(ergebnisDialog,ErgebnisDialogActivity.class); intent.putExtra("geschlecht", info.getGeschlecht()); intent.putExtra("gebDat", info.getGebDat()); intent.putExtra("beruf", info.getBeruf()); intent.putExtra("versBeginn", info.getVersBeginn()); intent.putExtra("tarifAuswahl", info.getTarifAuswahl()); intent.putExtra("status", ergebnisDialog.getStatus()); intent.putExtra("progress", ergebnisDialog.getProgress()); intent.putExtra("resString", res); ergebnisDialog.startActivity(intent); } Danke schon mal für alle Hinweise. MfG |
Florian B. ![]()
Rang: Android HiWi Beiträge: 178 Eintrittsdatum: 17.04.2010 |
RE: Probleme mit AsyncTask verfasst am 09.02.2012 19:09:11
Für was brauchst du in diesem Fall 2 AsyncTasks? Ich sehe den Sinn darin gerade nicht. Warum machst du nicht alles in einem AsyncTask? Würde die ganze Geschichte vermutlich vereinfachen.
|
Erik Sattelmair ![]() Rang: Android Junior Beiträge: 10 Eintrittsdatum: 08.02.2012 |
RE: Probleme mit AsyncTask verfasst am 09.02.2012 19:16:31
Hallo Florian B., das Problem besteht darin, das der eine Thread bei fehlender Internetverbindung endlos läuft und ich dann das Problem habe, das auch der Progressdialog endlos läuft. Das will ich aber nicht. Der Progressdialog soll dann beendet werden.
MfG |
Florian B. ![]()
Rang: Android HiWi Beiträge: 178 Eintrittsdatum: 17.04.2010 |
RE: Probleme mit AsyncTask verfasst am 09.02.2012 19:25:12
Warum sollte der eine Thread bei fehlender Internetverbindung endlos laufen? Dafür gibt es doch Timeouts. Die dafür sorgen, dass nicht ewig auf eine Verbindung gewartet wird. Wenn dieser Zeitraum überschritten wird, dann wird eine Exception geworfen und die doInBackground() Methode läuft weiter bis zum Ende. Die Länge des Timeouts kannst du für den DefaultHttpClient einstellen.
|
Erik Sattelmair ![]() Rang: Android Junior Beiträge: 10 Eintrittsdatum: 08.02.2012 |
RE: Probleme mit AsyncTask verfasst am 09.02.2012 19:31:38
Das mit den Timeouts hab ich auch schon probiert. Und zwar habe ich in der die GetConnection-Klasse direkt von meiner Activity aus aufgerufen und dann mit .get() Methode den Timeout definiert. Dann allerdings wird der Progressdialog nicht mehr angezeigt.
Allerdings weiß ich nicht, wie man den Timeout für den Default-HTTP-Client einstellt. Hast du mir evtl. n Stück Code zum erklären?? MfG |
Florian B. ![]()
Rang: Android HiWi Beiträge: 178 Eintrittsdatum: 17.04.2010 |
RE: Probleme mit AsyncTask verfasst am 09.02.2012 19:44:10 |
Erik Sattelmair ![]() Rang: Android Junior Beiträge: 10 Eintrittsdatum: 08.02.2012 |
RE: Probleme mit AsyncTask verfasst am 09.02.2012 20:14:17
Du bist der Größte
Das war genau das was ich gesucht habe. Tausend Dank und einen schönen Abend noch. MfG |
Erik Sattelmair ![]() Rang: Android Junior Beiträge: 10 Eintrittsdatum: 08.02.2012 |
RE: Probleme mit AsyncTask verfasst am 09.02.2012 20:37:01
Aber nur Interesse halber: Wie ist es (wenn überhaupt) möglich, aus einer doInBackground()-Methode nen anderen Thread zu starten??
MfG |