Что бы был такой результат!
В AsyncTask выполняется парсинг страницы.Интересуют данные по свободным велосипедам на станциях в городе,то есть название и количество велосипедов,после чего записывается в ArrayList.
Но записать я могу только в один ArrayList,так как вернуть из doInBackground получается только одну переменную.
Записал я поочередно здесь.
while (ilosc.find() && stacja.find()) {
output.add(stacja.group(1));
output.add(ilosc.group());
}
то есть в onPostExecute у меня есть одна переменная output,которая содержит нулевым элементом название для первой станции,а первым элементом количество велосипедов для нее.Вторым элементом-название второй станции, третьим количество велосипедов на второй станции..
Я так понимаю,что надо как-то сгруппировать каждые 2 элемента.Или даже 3,чтобы добавить еще расстояние между станциями.
Или как иначе добиться результата,такого как на фото?
class Parse extends AsyncTask<String, Void, List<String>> {
Document doc;
protected List<String> doInBackground(String... args) {
Element mt = null;
Pattern i = null;
Pattern n = null;
Matcher ilosc = null;
Matcher stacja = null;
List<String> output = new ArrayList<>();
try {
doc = Jsoup.connect("https://kmkbike.pl/panel/station-map/").get();
mt = doc.select("script").last().previousElementSibling();
i = Pattern.compile("\\d{1,2}\\/\\d{1,2}");
n = Pattern.compile("<h3>(.*)<\\/h3>");
ilosc = i.matcher(mt.html());
stacja = n.matcher(mt.html());
while (ilosc.find() && stacja.find()) {
output.add(stacja.group(1));
output.add(ilosc.group());
}
} catch (IOException e) {
e.printStackTrace();
}
Log.d(TAG, "OUTPUT");
return output;
}
protected void onPostExecute(List<String> output) {
pd.dismiss();
ListView lv = (ListView) findViewById(R.id.listView);
lv.setAdapter((new ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, output)));
}
}