• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak prawidłowo nasłuchiwać zmieniającą się wartość stringa.

Object Storage Arubacloud
0 głosów
137 wizyt
pytanie zadane 4 stycznia 2021 w Android, Swift, Symbian przez kunegundek Nowicjusz (120 p.)

Cześć!

Dzisiaj przychodzę do Was z takim jednym gorącym pytaniem - aktualnie tworzę aplikację pod Androida współpracującą z firestore i zaimplementowałem klasę sprawdzającą typ konta. Wszystko działa poprawnie, jednakże chciałbym teraz pobrać wartość "typeOfAcc" z tej klasy w innej klasie, ponieważ będzie to ścieżka do mojego dokumentu w bazie, jednakże jest jeden warunek - ścieżka musi się pobierać dopiero wtedy, kiedy zostaną pobrane dane z bazy i na ich podstawie zostanie ustalone, czy należy zmienić typ konta na "Trenerzy". Ma ktoś jakiś pomysł? Wszystkie moje dotychczasowe próby kończyły się na tym, że po prostu druga klasa pobiera tego stringa, przed zmianą jego wartości, czego wynikiem jest brak dostępu do danych. Sprawdzając po logach, wszystko jest okej, wartość się zmienia, ale niestety po pobraniu wartości. Z góry dzięki za pomoc!

 

public class UserValid
{
    String typeOfAcc = "Podopieczni";
    FirebaseFirestore fStore;
    FirebaseAuth fAuth;
    DocumentReference documentReference;
    List itemList = new ArrayList<>();
    String userID;

    public UserValid()
    {
        Log.d("TAG", "Błąd, wybrano konstruktor bez argumentów");
    }

    //Metoda sprawdzająca jaki typ konta jest aktualnie obsługiwany
    // Jeśli wartość true - konto podopiecznego, wartość false - konto trenera;
    public UserValid(FirebaseAuth fAuth, FirebaseFirestore fStore)
    {
        userID = fAuth.getCurrentUser().getUid();
        this.fAuth = fAuth;
        this.fStore = fStore;
        documentReference = fStore.collection("Podopieczni").document(userID);

        readData(new FirestoreCallback()
        {
            @Override
            public void onCallback(List<String> list)
            {
                if(itemList.get(0) == null)
                {
                    typeOfAcc="Trenerzy";
                    Log.d("TAG", itemList.toString());

                }
            }
        });


    }
    private void readData(FirestoreCallback firestoreCallback)
    {
        //DocumentReference docRef = db.collection("cities").document("SF");
        documentReference.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
            @Override
            public void onComplete(@NonNull Task<DocumentSnapshot> task) {
                if (task.isSuccessful())
                {

                    //for(DocumentSnapshot document : task.getResult()) {
                        String itemName = task.getResult().getString("Imie");
                        itemList.add(itemName);

                   // }
                    firestoreCallback.onCallback(itemList);
                }
            }

        });
    }

   
   
    private interface FirestoreCallback
    {
        void onCallback(List<String> list);
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 4 stycznia 2021 przez Wiciorny Ekspert (269,590 p.)
String nie powinien być wartościa zmieniającą się bo jest immutable. https://www.javatpoint.com/immutable-string
komentarz 4 stycznia 2021 przez kunegundek Nowicjusz (120 p.)
Wporządku, rozumiem. A w takim razie mogę prosić o może jakąś małą sugestię, jak poradzić sobie z problemem walidacji, czy dany dokument istnieje w kolekcji bazy firebase? Owym Stringiem, który jest tam w moim kodzie jest po prostu ścieżka do kolekcji w bazie firebase i wynika ona  z tego, że istnieją dwa typy kont, docelowo o nieco innych możliwościach. No i problem polega na tym, że chciałbym po prostu napisać metoę, która sprawdzałaby tą kwestię, w taki sposób, aby nie tworzyć oczywiście wszystkich funkcjonalności osobno dla każdej z ról. Można to łatwo w teorii sprawdzić, bo jak nie istnieje dokument o podanym id w bazie pod podaną lokacją, tzn. że na 100% jest w drugiej, tylko pozostaje kwestia tego jak to zaprojektować. Ma ktoś jakiś pomysł? Byłbym baaardzo wdzięczny, nie powiem, siedzę nad tym problemem już dość dużo czasu i strasznie się tym irytuję.

Podobne pytania

0 głosów
1 odpowiedź 265 wizyt
pytanie zadane 22 stycznia 2018 w Java przez Partyjny Obywatel (1,170 p.)
0 głosów
0 odpowiedzi 115 wizyt
0 głosów
0 odpowiedzi 135 wizyt

92,539 zapytań

141,382 odpowiedzi

319,481 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...