Получайте данные из базы данных в реальном времени между таблицей и представлением переработчика - PullRequest
0 голосов
/ 26 апреля 2019

У меня проблемы с чтением данных из Firebase. Но я просто могу получить отдельные данные, но мне нужно получить список этих данных. Так как это моя первая работа с использованием Firebase. Я использовал только SQL в прошлом.

Вот моя структура Firebase.

"UserEO" : {
    "RZ5piQEWcoSonDYPu3NSKBrXTbW2" : {
      "-LdK1ZgjaKvXFjUeq-Yj" : {
        "keyUID" : "RZ5piQEWcoSonDYPu3NSKBrXTbW2"
      },
      "-LdK264lPX9eBBzYe0m4" : {
        "keyUID" : "RZ5piQEWcoSonDYPu3NSKBrXTbW2"
      }
    }   
},

"eventOrganizer" : {
    "-LdK1ZgjaKvXFjUeq-Yj" : {
      "deskripsi" : "USMA is .. ",
      "namaGrup" : "UKM USMA",
      "website" : "ukm.usma.blogspot.com"
    },
    "-LdK264lPX9eBBzYe0m4" : {
      "deskripsi" : "LPM KOMPEN is ..",
      "namaGrup" : "UKM LPM KOMPEN",
      "website" : ""
    }   },   

"users" : {
    "RZ5piQEWcoSonDYPu3NSKBrXTbW2" : {
      "email" : "kiranana@gmail.com",
      "nama" : "kirana"
    }   
}

Вот мой код , Я хочу выбрать группу eventOrganizer, к которой присоединяется пользователь.

    userId=auth.getCurrentUser().getUid();

    recyclerView = (RecyclerView) findViewById(R.id.rv_grupeo);
    layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(layoutManager);
    grupEOModelList = new ArrayList<>();
    adapter = new GrupEOAdapter(grupEOModelList,GrupEO.this);
    recyclerView.setAdapter(adapter);

    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("UserEO").child(userId);
    databaseReference.addValueEventListener(valueEventListenerAdmin);
}

ValueEventListener valueEventListenerAdmin = new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        String getKey = null;
        if (dataSnapshot.exists()){
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                getKey = snapshot.getKey();
            }
            final DatabaseReference databaseReferenceEO = FirebaseDatabase.getInstance().getReference("eventOrganizer");
            databaseReferenceEO.orderByKey().equalTo(getKey).addValueEventListener(valueEventListener);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
};
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        grupEOModelList.clear();
        if (dataSnapshot.exists()){
            for (DataSnapshot snapshot : dataSnapshot.getChildren()){
                GrupEOModel grupEOModel = snapshot.getValue(GrupEOModel.class);
                grupEOModelList.add(grupEOModel);
            }
            adapter.notifyDataSetChanged();
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
};}

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2019

вы можете получить список данных, как это: -

ArrayList<Chat> mChat = new ArrayList<>();
DatabaseReference reference = FirebaseDatabase.getInstance().getReference(chatTableName);
reference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    mChat.clear();
                    Chat chat = null;
                    for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                        chat = snapshot.getValue(Chat.class);
                        mChat.add(chat);
                    }
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {

                }
            });
0 голосов
/ 26 апреля 2019

Я думаю, проблема здесь:

final DatabaseReference databaseReferenceEO = FirebaseDatabase.getInstance().getReference("eventOrganizer");
        databaseReferenceEO.orderByKey().equalTo(getKey).addValueEventListener(valueEventListener);

Я не знаю, что это хорошая идея, чтобы встроить valueListener в OnDataChange, я бы посоветовал вам удалить это и работать с обратными вызовами. Просто конвертируйте UserEO в список, используя это:

ArrayList<UserEO> td = (ArrayList<UserEO>) dataSnapshot.getValue();

возвращает его в обратном вызове, затем для каждого ключа можно вызывать метод с помощью вашего valueEventListener.

Я также хотел бы предложить вам упрощение. Вы можете добавить еще одного дочернего элемента внутри пользователей, например, events: {"LdK1ZgjaKvXFjUeq", "-LdK264lPX9eBBzYe0m4"}, так что у каждого пользователя будет довольно простой ключ списка событий.
Ключ к хорошему использованию NoSQL заключается в том, чтобы хорошо спроектировать ваши данные, оптимизируя их для запросов. Я вижу, вы все еще думаете как таблицы SQL, но это нормально, так как вы все еще учитесь.

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