Показать панель выполнения в Async Task на Android

Я хочу показать индикатор выполнения в задаче Async onPreExecute(). Но я не могу пройти мимо context. Может ли кто-нибудь помочь?

public class myClass extends AsyncTask<Void,Void,Void>{
    Context ctx;
    ProgressDialog d;
    String s;


    public myClass (String S, Context con) {
        this.ctx = con;
        this.s = S;
    }


    @Override
        protected void onPreExecute() {
            d = new ProgressDialog(this.ctx);
            d.setMessage("Please wait...");
            d.setIndeterminate(true);
            d.show();
        }

Вызов из Основной деятельности как

 new myClass(MainActivity.this);
 myClassObj.execute(s);

android,android-asynctask,

-2

Ответов: 3


0 принят

Это должно быть так, переходя в конструктор.

public class myClass extends AsyncTask<Void,Void,Void>{
    private ProgressDialog dialog;
    private String paramOne;
    private int paramTwo;

    public myClass (Activity activity, String paramOne, int paramTwo) {
       dialog = new ProgressDialog(activity);
       this.paramOne = paramOne; // "Hello"
       this.paramTwo = paramTwo; // 123
    }

    @Override
    protected void onPreExecute() {
       dialog.setMessage("Please wait...");
       dialog.setIndeterminate(true);
       dialog.show();
    }

Назовите это так.

new myClass(YourActivity.this, "Hello!", 123).execute();

0

У меня есть лучший подход для этого, используйте индикатор выполнения в вашей деятельности или фрагменте, и как только вы запустите свою асинтезу, установите видимость для VISIBLE, и когда вы получите результат в postExecute, установите видимость, пройденную с использованием интерфейса в действии. Что-то вроде этого

/**
     * Listener for listening events happening in background task, whether cancelled or completed
     * with error or success.
     */
    public interface Listener {
        /**
         * Callback invoked when request is completed and response is got with
         * code == {@value java.net.HttpURLConnection#HTTP_OK}.
         */
        void onSuccess(Response response);

        /**
         * Callback invoked when request is cancelled or completed with response
         * code != {@value java.net.HttpURLConnection#HTTP_OK}.
         */
        void onError(Response response);
    }

и в вашей деятельности

   void onSuccess(Response response){
       //Visibility to Gone.
   }

0

Будет два случая вызова AsyncTask, при вызове AsyncTask в том же действии: -

public class myClass extends AsyncTask<Void,Void,Void>{
ProgressDialog d;
String s;

public myClass (String str) {
    this.s= str;
}
@Override
    protected void onPreExecute() {
        d = new ProgressDialog(getApplicatinContext());
        d.setMessage("Please wait...");
        d.setIndeterminate(true);
        d.show();
    }

Вызов из Основной деятельности как

myClassObj.execute();

Если вам нужно вызвать отдельную активность или в отдельный файл, вам необходимо следовать приведенному ниже коду:

public class myClass extends AsyncTask<Void,Void,Void>{
    Activity act;
    ProgressDialog d;


public myClass (Activity act) {
    this.act = act;
}


@Override
    protected void onPreExecute() {
        d = new ProgressDialog(act.getApplicationContext());
        d.setMessage("Please wait...");
        d.setIndeterminate(true);
        d.show();
    }

Вызов из Основной деятельности как

new myClass(MainActivity.this);
myClassObj.execute(s);
андроид, андроид-AsyncTask,
Похожие вопросы