#android #android-asynctask
#Android #android-asynctask
Вопрос:
Я хочу показать индикатор выполнения в асинхронной задаче 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);
Комментарии:
1. для этого вы можете использовать метод getApplicationContext()
2. использовать конструктор
3. @RahulKhurana где я должен его использовать?
4. новый ProgressDialog(getApplicationContext()); попробуйте это
5. myclassу нужны два параметра, и вы отправляете только 1. Это должен быть новый MyClass(yourString ,MainActivity.this)
Ответ №1:
Это должно быть так, переходя в конструктор.
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();
Комментарии:
1.
new myClassObj(MainActivity.this).execute();
не работает.2. не работает. Смотрите мой обновленный вопрос. Я также хочу отправить параметр в асинхронный класс. Также покажите код приема в классе async.
3. Не работает.
new myClass(MainActivity.this);
,MainActivity.this
красный. Выдает ошибку.Cannot be applied.
4. Обновите свой вопрос и опубликуйте свой код о том, как вы вызываете эту асинхронную задачу.
5. Вы понимаете, что называете это неправильно, верно? Это должно быть
new myClass(MainActivity.this).execute();
Ответ №2:
У меня есть лучший подход к этому, используйте индикатор выполнения в своей деятельности или фрагменте, и как только вы запустите свою asynctask, установите видимость на ВИДИМУЮ, а когда вы получите результат в postExecute, установите видимость, используя интерфейс в activity. Что-то вроде этого
/**
* 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.
}
Ответ №3:
Будет два случая вызова 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);
Комментарии:
1. Смотрите мой обновленный вопрос. Я хочу отправить параметр в асинхронные классы.