показать и скрыть кнопки, используя ссылку на Firebase - PullRequest
2 голосов
/ 26 марта 2020

показать и скрыть кнопки, используя ссылку на базу данных

Здравствуйте. У меня есть вопрос, мне нужно отобразить казино, если у меня есть узел казино. если у вас нет узла казино, который будет отображать кнопку купить казино. Я использую «если», «еще», но, видимо, он не проверяет «если», потому что для пользователя, у которого есть узел казино, он отображает кнопку «buycassino», а у пользователя, у которого нет узла казино, он также отображает кнопка «buycassino» Я прилагаю отладку вместе со структурой Firebase. Заранее спасибо. любая помощь приветствуется.

код:

   final DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    final String userId = user.getUid();


    ref.child("users").child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for (DataSnapshot ds : dataSnapshot.getChildren()) {
                if (ds.child("cassino").exists())  {
                    openCassino.setVisibility(View.VISIBLE);
                    buyCassino.setVisibility(View.GONE);
                } else {
                    buyCassino.setVisibility(View.VISIBLE);
                    openCassino.setVisibility(View.GONE);
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {



        }
    });

IM отладки с пользователем, который имеет узел казино. enter image description here

IMG отладки с ПОЛЬЗОВАТЕЛЬ, КОТОРЫЙ НЕ ИМЕЕТ УЗЕЛ КАЗИНО. enter image description here

МОЙ XML ФАЙЛ

 <Button
                android:id="@+id/buyCassino"
                android:layout_width="183dp"
                android:layout_height="wrap_content"
                android:background="@color/colorAccent"
                android:text="Buy Cassino"
                android:textColor="#FFFFFF"
                android:visibility="invisible" />

            <Button
                android:id="@+id/openCassino"
                android:layout_width="190dp"
                android:layout_height="wrap_content"
                android:background="@color/colorAccent"
                android:text="OPEN CASSINO"
                android:textColor="#FFFFFF"
                android:visibility="invisible" />

1 Ответ

1 голос
/ 26 марта 2020

Ваш JSON снимок экрана не завершен, но я собираюсь предположить, что у вас есть структура /users/$uid, поэтому узел UID находится непосредственно под /users.

Если это В этом случае ваш слушатель уже прослушивает указанный c пользовательский узел, поэтому вам не нужно l oop over dataSnapshot.getChildren().

Так что это должно быть что-то вроде:

ref.child("users").child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.child("cassino").exists())  {
            openCassino.setVisibility(View.VISIBLE);
            buyCassino.setVisibility(View.GONE);
        } else {
            buyCassino.setVisibility(View.VISIBLE);
            openCassino.setVisibility(View.GONE);
        }
    }
    ...

Немного более дешевый способ выполнить sh то же самое - напрямую прослушивать узел cassino [sic]:

ref.child("users").child(userId).child("cassino").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists())  {
            openCassino.setVisibility(View.VISIBLE);
            buyCassino.setVisibility(View.GONE);
        } else {
            buyCassino.setVisibility(View.VISIBLE);
            openCassino.setVisibility(View.GONE);
        }
    }
    ...

Это избавляет от необходимости загружать весь пользовательский узел использовать только свойство cassino.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...