Erik Sattelmair
- Forum-Beiträge: 10
09.02.2012, 18:03:05 via Website
09.02.2012 18:03:05 via Website
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
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
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.