Передача аргументов в AsyncTask и возвращение результатов

У меня есть приложение, которое выполняет некоторые длинные вычисления, и я хотел бы показать диалоговое окно выполнения, пока это выполняется . Пока что я обнаружил, что могу делать это с потоками / обработчиками, но не работал, а затем я узнал о AsyncTask .

В своем приложении я использую карты с маркерами на них, и я реализовал функцию onTap для вызова метода, который я определил. Метод создает диалоговое окно с кнопками Да / Нет, и я хотел бы вызвать AsyncTask , если щелкнуть Да. У меня вопрос, как передать ArrayList в AsyncTask (и работать с ним там), и как вернуть новый ArrayList как результат AsyncTask ?

Код метода выглядит следующим образом:

String curloc = current.toString();
String itemdesc = item.mDescription;

ArrayList<String> passing = new ArrayList<String>();
passing.add(itemdesc);
passing.add(curloc);

ArrayList<String> result = new ArrayList<String>();

new calc_stanica().execute(passing,result);

String minim = result.get(0);
int min = Integer.parseInt(minim);

String glons = result.get(1);
String glats = result.get(2);

double glon = Double.parseDouble(glons);
double glat = Double.parseDouble(glats);

GeoPoint g = new GeoPoint(glon, glat);
String korisni_linii = result.get(3);

Итак, как вы видите , Я хотел бы отправить список строковых массивов, "проходящих" в AsyncTask , и получить от него список строковых массивов "результат". А класс calc_stanica AssycTask выглядит так:

public class calc_stanica extends AsyncTask<ArrayList<String>, Void, ArrayList<String>> {
    ProgressDialog dialog;

    @Override
    protected void onPreExecute() {
        dialog = new ProgressDialog(baraj_mapa.this);
        dialog.setTitle("Calculating...");
        dialog.setMessage("Please wait...");
        dialog.setIndeterminate(true);
        dialog.show();
    }

    protected ArrayList<String> doInBackground(ArrayList<String>... passing) {

        //Some calculations...

        return something; //???
    }

    protected void onPostExecute(Void unused) {
        dialog.dismiss();
    }

Итак, мой вопрос заключается в том, как получить элементы списка «проходящих» массивов в методе AsyncTask doInBackground (и использовать их там ), и как вернуть список массивов для использования в основном методе (список массивов «результат»)?

37
задан RHA 19 June 2016 в 20:06
поделиться