Данные Firebase в Android Spinner

Это продолжение предыдущего сообщения, с которым у меня все еще есть несколько проблем - см. Исходный пост здесь: Заполнение счетчика Android данными Firebase.

Я внес поправки в свои правила Firebase, чтобы обеспечить аутентификацию на основе пользователей для каждого пользователя. Я успешно реализовал это, однако одна проблема все еще остается - счетчик в моем MaintenanceActivity больше не заполняется атрибутом propertyAddress из узла properties в моей базе данных.

Моя текущая настройка безопасности отлично работает для добавления, удаления и обновления записей, однако, похоже, она не заполняет счетчик propertyAddress.

Вот мои правила безопасности:

    {
  "rules": {
    "maintenance" : {
      "$uid" : {
    ".read": "$uid === auth.uid",
    ".write": "$uid === auth.uid"
  }
},
    "properties" : {
     "$uid" : {
    ".read": "$uid === auth.uid",
    ".write": "$uid === auth.uid"
    }
}
}
}

Отрывок кода из MaintenanceActivity, который, как я надеялся, заполнил счетчик:

fDatabaseRoot.child("properties").addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                final List<String> propertyAddressList = new ArrayList<String>();

                for (DataSnapshot addressSnapshot: dataSnapshot.getChildren()) {
                    String propertyAddress = addressSnapshot.child("propertyAddress").getValue(String.class);
                    if (propertyAddress!=null){
                        propertyAddressList.add(propertyAddress);
                    }
                }

                Spinner spinnerProperty = (Spinner) findViewById(R.id.spinnerProperty);
                ArrayAdapter<String> addressAdapter = new ArrayAdapter<String>(MaintenanceActivity.this, android.R.layout.simple_spinner_item, propertyAddressList);
                addressAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spinnerProperty.setAdapter(addressAdapter);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

Для дальнейшего пояснения вот моя структура данных

Данные Firebase в Android Spinner

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
1 039
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Под узлом properties у вас есть два идентификатора, первый - это userid, а второй - случайный идентификатор, сгенерированный методом push().

Чтобы получить доступ к адресу свойства, вам нужно получить userid, а затем, используя for(DataSnapshot addressSnapshot: dataSnapshot.getChildren()) {, вы выполните итерацию внутри случайного идентификатора и получите там атрибуты.

Так что измените это:

fDatabaseRoot.child("properties").addListenerForSingleValueEvent(new ValueEventListener() {

к этому:

FirebaseUser user=FirebaseAuth.getInstance().getCurrentUser();
String userid=user.getUid();
fDatabaseRoot.child("properties").child(userid).addListenerForSingleValueEvent(new ValueEventListener() {

Другие вопросы по теме