Wpis z mikrobloga

#androiddev #kotlin
Jak działa MutableList?

Zrobiłem sobie klasę z listą, w tej klasie jest też metoda, która wywołuje zapytanie do api. Uzupełniam tę listę danymi z api, następnie wołam aktywność, z której wywołałem tę metodę, że zapytanie z api zakończone. Aktywność sobie woła geta do listy. Zanim zawołam api, robię jeszcze clear.

Za pierwszym razem przychodzi ładnie wypełnione danymi. Za każdym kolejnym razem odsyła puste. W Javie to działało bez problemu. Dlaczego tu nie działa?
  • 26
@ZycieJestNobelon: Patrzyłem wiele razy i wygląda to tak jak napisałem. Najpierw aktywność woła metodę, która uzupełnia listę, a gdy skończy to przez listnera informuje aktywność, że zostało skończony, wtedy aktywność woła geta do listy.
następnie wołam aktywność, z której wywołałem tę metodę, że zapytanie z api zakończone


@push3k-pro: wyczuwam Memory Leak (choć to pewnie nie dlatego nie działa). Zerujesz tego listenera na ubijaniu aktywności?

Tak swoją drogą, nie lepiej użyć choćby RxJavy do takich rzeczy?
Druga sprawa, tego typu działania do robota dla ViewModela, nie dla Activity.

Pokaż kod to zobaczymy.
@Alpha_Male:

Zerujesz tego listenera na ubijaniu aktywności?

Nie. To działa tylko w jednej aktywności.

Tak swoją drogą, nie lepiej użyć choćby RxJavy do takich rzeczy?

Mam na to za mało czasu. Mam dopiero w planach się tego nauczyć, a potrzebuję mieć coś działające "na już".

Druga sprawa, tego typu działania do robota dla ViewModela, nie dla Activity.

Klasa, która wykonuje wołąnie api nie jest aktywnością.

Pytanie, dlaczego w Javie to działa
@push3k-pro:
Rozumiem argument o Rx, chociaż patrząc na kod znacznie by to ułatwiło życie.

W jednej czy nie jednej, chodzi o to, że przekazujesz Aktywność do jakiejś klasy jako listener. Tamta klasa czy obiekt ma referencję do Aktywności, ale nie masz kontroli nad instancją Aktywności, przychodzi co do czego (zmiana konfiguracji, aplikacja trafia do tła itp.) i Android ją ubija. Chciałby ją wywalić z pamięci, ale jakiś obiekt trzyma do niej
@Alpha_Male:

Jeśli to zadanie rekrutacyjne to nie mówię, że bym Cię uwalił, ale dobrze by było mieć chociaż świadomość, że można to zrobić lepiej.

Mam tego świadomość, niemniej, ja w czasie pisania tego programu nauczyłem się czegoś nowego -> według zasady, by chodzić na rekrutacje, bo można się czegoś nauczyć.

I poczytaj o Memory Leakach, bo jestem pewien, że jeśli Cię zaproszą na dalszy etap, to o to zapytają ( ͡
@Alpha_Male: @mmaciejow: @ZycieJestNobelon:

To będzie głupsza przygoda niż mi się wydawało ()

fun updateReceiptsList(newlist: List) {
itemModelList.clear()
itemModelList.addAll(newlist)
notifyDataSetChanged()
}

itemModelList jest typem Mutable.

Jak to działa:
1. Za pierwszym razem czyści itemModelList i newlist
2. Za każdym kolejnym działa poprawnie.

Moje pytanie - czy Kotlin ma jakieś problemy z identyfikacją tego na jakim obiekcie pracuje, jeśli znajduje w różnych miejscach kilka
@ZycieJestNobelon: Nom, wtedy w ogóle nie będę mógł czyścić. Ja w tym przypadku poradziłem sobie po prostu przepisując a = b, właśnie wykańczam wszystkie elementy i chcę jeszcze sprawdzić czy to samo czasem nie zadziała przy tamtym odświeżaniu.
@push3k-pro: no cóż, w każdym razie powodzenia :) jak zmieniałem pracę to "chwilę" mi to zajęło i za każdym razem jak miałem takie zadania to spędzałem na tym masę czasu, bo uczyłem się przy okazji nowych rzeczy. Trochę to słabe (takie wrażenie oszukiwania, że niby umiem ;) ), ale nie zawsze na codzień robi się, tak jak się robić powinno, a potem trzeba nadrabiać.

Najważniejsze, żeby mieć świadomość, że można to