Asynctask TimeOut mit ProgressDialog

  • 1 Antworten
  • Letztes Antwortdatum
H

HammerH

Neues Mitglied
0
Hallo,

ich habe ein Problem und hoffe ihr könnt mir helfen.
In meiner MainActivity starte ich mit Buttonknopf einen Upload von Daten.
Diesen führe ich mit einem AsyncTask aus.
Der Asynctask erstellt einen Progressdialog und sobald "doinbackground" fertig ist, gehts zur onpostexecute und Progressdialog wird geschlossen.

Ich habe das Problem aber, bei einer langsamen Internetverbindung gibt der Asynctask irgendwann auf und der Progressdialog läuft weiter bis ins unendliche.

Wie implementiere ich einen TimeOut, der nach ca 30 Sekunden den AsyncTask beendet und die Progressdialog?

Hier mal mein Code vom AsyncTask:

@Override
protected void onPreExecute() {
super.onPreExecute();
time = System.currentTimeMillis();

Log.d(TAG, "PBar: Hat gestartet");
if (MainActivity.MessungStart == true)
{
ConnectionTask.dialog = new ProgressDialog(MainActivity.context);

ConnectionTask.dialog.setMessage("Daten werden hochgeladen...");
dialog.setCanceledOnTouchOutside(false);
ConnectionTask.dialog.show();
}
}

protected Void doInBackground(String... args) {

mUser = MainActivity.username;
mPassword = MainActivity.password;
Log.d(TAG,"Async: User= "+mUser+" Password= "+mPassword);

Timer t = new Timer();
TimerTask tk = new TimerTask() {

@Override
public void run() {
timeout = true;
}
};
t.schedule(tk, 100);
if(timeout == true)
{
Log.d(TAG, "TimeOut = true");
onPostExecute(null);
}

try {
authenticate();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


{
try {
sendData();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

if(temp!= null)
{
try {
ReceiveMessageState();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Sendungfertig = true;
if(MainActivity.asyncIsCanceled == true)
{
if (ConnectionTask.dialog.isShowing() == true)
{
ConnectionTask.dialog.dismiss();
}
}
isCancelled();
return null;
}

@Override
protected void onPostExecute(Void v) {
super.onPostExecute(v);
Log.d(TAG, "PBar: Sollte enden");
if(MessageChecked==true)
{
if (ConnectionTask.dialog.isShowing() == true)
{
ConnectionTask.dialog.dismiss();
}


if(isCancelled()==true)
{
if (ConnectionTask.dialog.isShowing() == true)
{
ConnectionTask.dialog.dismiss();
}
MessageChecked = false;
MainActivity.MessungStart = false;
}
}
}
 
Liefert dir deine Uploadmethode zufällig eine Exception? Wenn ja dort den dismiss + evtl. Toast für den Nutzer rein (bzw. die Methode in der Activity die dafür zuständig ist)
 
Zurück
Oben Unten