Wpis z mikrobloga

Hej Mirki i Mirabelki z #androiddev i #kotlin :D

Bawię się właśnie w AsyncTaski i chcę zrobić operację wycięcia fragmentu strony napisanej w htmlu (informację o czymś z tej strony) i w tym celu ściągam cały kod html strony, a później chciałem znaleźć interesujący mnie fragment metodą .indexOf, jednak zwraca mi ona za każdym razem -1, mimo że ten fragment jest w tym stringu (sprawdzałem poprzez wczytanie całej strony i wgrywa się ona normalnie, dopiero z tym indexOf są problemy).
Czy jest coś takiego, że indexOf nie sprawdza całego stringa, ale leci do pewnego momentu? Bo na ten moment tak mi wygląda i nie wiem co robić ( ͡° ʖ̯ ͡°)

Kod wygląda następująco - zmienna reprezentująca znacznik, od którego zaczyna się interesujący mnie fragment kodu:
const val begin = "

"

Wspomniany indexOf:
val startIndex = html.indexOf(begin)

Ja robię coś źle, czy co? Może jest zbyt późno na myślenie i już po prostu nawet tak prosta rzecz się komplikuje ()
  • 4
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Bawię się właśnie w AsyncTaski


@polskiniko: Don't ( ͡° ͜ʖ ͡°) asynctaski są bardzo słabo powiązane z cyklem życia aktywności i są częstym powodem błędów. Oprócz tego są k------o niewygodne w użyciu, trzeba napisać w c--j boilerplate code.

Ogólnie jak masz coś z HTMLem to zamiast parsować to z palca to użyj biblioteki, chociażby jsoup. Nie wkleiłeś całego kodu ale jest szansa że zmienna html
  • Odpowiedz
@Mithrindil: W sumie korzystam z AsyncTasków tylko do tego i do dużych operacji w Roomie, jak inaczej wykonywać te operacje na bazie danych? ^^

W linku niżej jest wspomniany AsyncTask, dodam jeszcze jak wyciągam wynik jego działania, ale swoją drogą - to nie będzie działało tak, że AsyncTask zwraca html w całości? ( ͡° ͜ʖ ͡
  • Odpowiedz
@polskiniko: wywołując go w ten sposób mijasz się z sensem jego istnienia. Bo wywołując get() zatrzymujesz bieżący wątek i czekasz na wykonanie async taska. W async tasku masz metodę "on post execute" i tam powinieneś konsumować wynik operacji (ona wykonuje się na wątku UI więc możesz tam dotykać widoku).

Popatrz tego jsoup, czuję że rozwiąże Twoje problemy:
https://jsoup.org/cookbook/input/load-document-from-url
https://jsoup.org/cookbook/extracting-data/attributes-text-html
  • Odpowiedz