Создание ListView в Firebase Android - PullRequest
0 голосов
/ 05 июня 2018

У меня есть база данных Firebase с несколькими значениями клиентов, как показано ниже.(Я упомянул ребенка в скобках)

-Sooraj (child(registered user))
     -January(child(month))
           -Aswathy(child(name))
               -address: ""
               -cost: ""
               -details: ""
               -email: ""
               -name: "Aswatyy" - (child ("name"))-
               -phone: "944346848494"
               -received: ""
               -status: "Proposal Sent"

Мне нужно взять ребенка («имя») из базы данных и поместить его в ListView.

Мой declaration как

ListView customerList;
List<String> customerArray = new ArrayList<>();
ArrayAdapter<String> adapter;

затем

customerList=findViewById(R.id.customerlistView);

ListView, заполняющий код как

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(month);
    DatabaseReference NameRef = ref.child("name");

    NameRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){

                String nameDatabase = postSnapshot.getValue(String.class);
                customerArray.add(nameDatabase);
                adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, customerArray);
                customerList.setAdapter(adapter);
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

            Log.w("name","load:onCancelled",databaseError.toException());

        }
    });

Ничего не происходит.Где я ошибся в этом коде?

Ответы [ 3 ]

0 голосов
/ 05 июня 2018
  final ArrayList<String> names= new ArrayList<>();
        FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
        DatabaseReference databaseReference = firebaseDatabase.getReference("User").child(userName).child(monthName);

        final ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                for(DataSnapshot ds : dataSnapshot.getChildren()) {
                    HashMap nameModel = (HashMap) dataSnapshot.getValue();
                    String name =(String) nameModel.get("name");
                    names.add(name);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        };
        databaseReference.addValueEventListener(valueEventListener);

из вышеприведенного метода вы можете получить массив имен и установить его для своего адаптера

Ваша таблица будет такой

User
   -registeredUserName
            -monthName
              -childName
                   name

, если у вас нет пользователяв качестве имени таблицы

 -registeredUserName
            -monthName
              -childName
                   name

, затем просто передайте

DatabaseReference databaseReference = firebaseDatabase.getReference().child(userName).child(monthName);
0 голосов
/ 05 июня 2018

Чтобы отобразить все эти имена, используйте следующий код:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference monthRef = rootRef.child(registeredUser).child(month);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            list.add(name);
        }
        ListView listView = (ListView) findViewById(R.id.list_view);
        ArrayAdapter arrayAdapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, list);
        listView.setAdapter(arrayAdapter);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
monthRef.addListenerForSingleValueEvent(eventListener);

В котором registeredUser, как в вашем примере, равно Sooraj, а month - January.

Вывод будет:

Aswatyy
//All the other names

В вашем коде есть две основные проблемы.Первой будет ваша ссылка, в которой в ref отсутствует ребенок, а в NameRef указано свойство, которое бесполезно.Вторая проблема заключается в том, что вы создаете и настраиваете адаптер внутри цикла for, в результате чего отображается только один элемент (последний элемент).

0 голосов
/ 05 июня 2018

Если вам нужен список имен, попробуйте следующее:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child(registeredUser);
 DatabaseReference nameRef = ref.child(month);

NameRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){

            String name=postSnapshot.getKey();
            customerArray.add(name);
            adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, customerArray);
            customerList.setAdapter(adapter);
        }

    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

        Log.w("name","load:onCancelled",databaseError.toException());

    }
});

Предполагая, что у вас есть этот db:

Sooraj
   January
      Aswathy
         address:...
         name:...

getKey() будет извлекать имена в базе данных

...