Я хочу получить результат от задачи Async. Если я использую task.execute.get, мой пользовательский интерфейс будет заморожен. Я хочу, чтобы моя задача Async была автономным классом, поэтому я не хочу помещать код обработки результатов в onPostExecute. Я нашел некоторую информацию о данных обратного вызова из задачи Async здесь: http://blog.evoxmusic.fr/content/how-implement-callback-asynctask
и здесь: asynctask android отправляет обратные вызовы пользовательскому интерфейсу
но проблема в следующем: 1-я не знаю, когда обрабатывать результат? 2-зачем использовать интерфейс? 3-В чем разница использования интерфейса с простым помещением результата в общедоступное поле в задаче Async из onPostExecute?
Это мой класс Async:
public class AsyncCallWs extends AsyncTask<String, Void, String> {
private ProgressDialog dialog;
public String methodName="";
private WebService ws;
private ArrayList<ServiceParam> paramsList;
private boolean hasParams;
public AsyncCallWs(Activity activity,String methodName) {
xLog.position();
try {
this.dialog = new ProgressDialog(activity);
this.methodName = methodName;
hasParams = false;
} catch (Exception e) {
xLog.error(e.getMessage());
}
}
public AsyncCallWs(Activity activity,String methodName,ArrayList<ServiceParam> params) {
xLog.position();
try {
this.dialog = new ProgressDialog(activity);
this.methodName = methodName;
this.paramsList = params;
hasParams = true;
} catch (Exception e) {
xLog.error(e.getMessage());
}
}
@Override
protected void onPreExecute() {
this.dialog.setMessage(PersianReshape.reshape("Loading..."));
this.dialog.show();
}
@Override
protected String doInBackground(String... params) {
xLog.position();
String result = "No async task result!";
try {
ws = new WebService(PublicVariable.NAMESPACE, PublicVariable.URL);
if (!hasParams){
result = ws.CallMethod(methodName);
}
else{
xLog.info("THIS METHOD IS: "+ methodName);
result = ws.CallMethod(methodName,paramsList);
xLog.info("THIS RESULT IS: "+ result);
}
} catch (Exception e) {
xLog.error(e.getMessage());
}
return result;
}
@Override
protected void onPostExecute(String result) {
xLog.position();
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
xLog.info("Output of current AsyncTask is:"+ result);
}
}