Я видел этот ответ: Как получить результат OnPostExecute() для основной активности, потому что AsyncTask - это отдельный класс?
Но это не то, что я прошу, поскольку мой вызывающий класс имеет несколько вызовов для AsyncTask
.
Я хочу создать общий AsyncTask
класс, который будет принимать URL-адрес и загружать контент из заданного URL-адреса и возвращать загруженный контент.
Пример:
public class MyAsyncTask extends AsyncTask<String, Void, String>{
ProgressDialog dialog;
protected void onPreExecute() {
super.onPreExecute();
dialog = ProgressDialog.show(context, "Loading", "Please wait...", true);
}
protected String doInBackground(String... params) {
// do download here
}
protected void onPostExecute(String result) {
super.onPostExecute(result);
dialog.dismiss();
}
}
И у меня есть другой класс, который вызывает этот AsyncTask
в разных сценариях
public class MyClass {
public method1(String url) {
String result = new MyAsyncTask().execute(url).get();
}
public method2(String url) {
String result = new MyAsyncTask().execute(url).get();
}
}
Я знаю, что использование метода get()
сделает весь этот процесс задачей синхронизации. Но я хочу вернуть результат в вызывающий класс. И я также знаю, чтобы предотвратить это, я должен реализовать интерфейс. Но поскольку у меня есть несколько вызовов в одном классе, это невозможно. Так может ли кто-нибудь дать мне идею решить эту проблему?