Problem mit ProgressDialog und AsyncTask

  • 2 Antworten
  • Letztes Antwortdatum
B

Boris0815

Fortgeschrittenes Mitglied
4
Hallo,

ich versuche gerade in meiner App einen ProgressDialog einzubauen, da ich ein paar Methoden habe, die evtl. mal 2-3 Sekunden brauchen. Ich bekomm es aber nicht richtig umgesetzt.

Zuerst mal meine AsyncTask-Klasse:
Code:
import de.facentis.RahmenActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;

public class ShowProgressDialogTask extends AsyncTask<Void, Void, Void> {

    Context context = null;
    
    //Constructor
    public ShowProgressDialogTask(Context context) {
        this.context = context;
    }
    
    
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        ((RahmenActivity)context).dialog = ProgressDialog.show(context, "", "Please wait for few seconds...", true);
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        ((RahmenActivity)context).dialog.dismiss();

    }

    @Override
    protected Void doInBackground(Void... params) {
        try {

        } catch (Exception e) {

        }
        return null;
    }
}
In meiner Activity rufe ich den Dialog folgendermaßen auf:

Code:
...
public ProgressDialog dialog = null;
...
private void InfoLoad(){
        try{
            ShowProgressDialogTask progressDialog = new ShowProgressDialogTask(this);
            progressDialog.execute(null, null, null);
            InitInfoPages();
            InitRahmenValues();

        }catch(Exception ex){
            Log.i("erer", ex.getMessage());
        }
    }
...
Die Methoden InitInfoPages() und InitRahmenValues() benötigen die besagten 2-3 Sekunden.
So wie beschrieben funktioniert es nicht, da erst die Methoden ausgeführt werden, dann kurz der Dialog erscheint und fertig.
Ich müsste ja eigentlich die beiden Methoden in der doInBackground aufrufen, oder?
Dies funktioniert aber nicht, da in den Methoden einige GUI-Sachen gemacht werden, die dann nicht mehr funktionieren. (InflaterException)

Kann mir bitte jemand helfen, wie ich wo den ProgressDialog aufrufen muss?
Ich hatte gehofft, dass man einfach sagt showDialog() -> MachWas() -> DismissDialog().

Gruß

Boris
 
Musst deinem doinbackground eben die nötigen Sachen geben. Dein Asynctask ist eine Klasse wie jede andere.

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Hallo,

habs hinbekommen das der ProgressDialog lädt. Ich habe jetzt die Methoden in die doInBackground gepackt und die Sache mit dem Looper ergänzt.

Code:
    protected Void doInBackground(Void... params) {
        try {
            Looper.myLooper();
            Looper.prepare();
            rA.InitJobsPages();
            rA.InitRahmenValues();

        } catch (Exception e) {

        }
        return null;
    }
In der Activity musste ich noch
Code:
runOnUiThread(new Runnable() {      
public void run() {      
// UI Kram      
} });
ergänzen.

Ich kann die Methoden jedoch nicht mehrmals aufrufen... Irgendwann führt er sie nicht mehr aus...

Gruß

Boris
 
Zuletzt bearbeitet:
Zurück
Oben Unten