Я все время делаю подобные вещи в своих приложениях, и самым простым способом, который я нашел, было создание интерфейса «обратного вызова» и передача его в качестве параметра моим «AsyncTask».Вы выполняете обработку doInBackground (), а когда она заканчивается, вы вызываете экземпляр Callback из onPostExecute, передавая объект «result» в качестве параметра.
Ниже приведена очень упрощенная версия.
Пример интерфейса обратного вызова:
package example.app;
public interface Callback {
void run(Object result);
}
Пример использования AsyncTask с использованием интерфейса обратного вызова выше:
public class GetDataFromNetwork extends AsyncTask<Void,String,Object> {
Callback callback;
public GetDataFromNetwork(Callback callback){
this.callback = callback;
}
protected void onPreExecute() {
super.onPreExecute();
progressDialog.show();
}
protected Object doInBackground(Void... params) {
Object result = null;
// do your stuff here
return result;
}
protected void onPostExecute(Object result) {
callback.run(result);
progressDialog.dismiss();
}
}
Пример использования вышеуказанных классов в вашем приложении:
class Example {
public onCreate(Bundle savedInstanceState){
//initialize
GetDataFromNetwork request = new GetDataFromNetwork(new Callback(){
public void run(Object result){
//do something here with the result
}});
request.execute();
}
}