RecyclerView не отображает данные из firebase - PullRequest
0 голосов
/ 31 мая 2018

Код

protected void onStart() {
    super.onStart();
    fetchResults();
}

private void fetchResults() {
    mDatabaseReference.child("Users").child(id).child("Quiz").child("Results").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot resultSnapshot: dataSnapshot.getChildren()) {
                String user = resultSnapshot.getKey();
                String score = resultSnapshot.getValue(String.class);
                Results results = new Results(user, score);
                resultsList.add(results);
            }
            mAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });
}

Сохранение данных

 String name = RecieversName;
                HashMap<String, String> userMap = new HashMap<>();
                userMap.put("Name", name);
                userMap.put("Score", String.valueOf(mScore));
                mRef.child("Users").child(RecieversId).child("Quiz").child("Results").child(UID).setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        if (task.isSuccessful()) {
                            Intent intent = new Intent(TakingQuiz.this, TakingQuizDone.class);
                            intent.putExtra("RecieversId",RecieversId);
                            intent.putExtra("Score", mScore.toString());
                            startActivity(intent);
                            finish();

                        }
                    }
                });

Структура базы данных - https://ibb.co/dJ6PdJ

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

1 Ответ

0 голосов
/ 18 декабря 2018

Во-первых, вам нужно извлечь все данные из базы данных и применить проверку на счетчике последнего элемента и установить данные в Adapter.Пожалуйста, используйте код ниже для вашей справки.

int totalItem = 0;
private void fetchResults() {
    mDatabaseReference.child("Users").child(id).child("Quiz").child("Results").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
totalItem = dataSnapshot. getChildrenCount();
            for (DataSnapshot resultSnapshot: dataSnapshot.getChildren()) {
                String user = resultSnapshot.getKey();
                String score = resultSnapshot.getValue(String.class);
                Results results = new Results(user, score);
                resultsList.add(results);
                if(totalItem == resultsList.size())
                {
                // set the data into Adapter
                }
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            throw databaseError.toException();
        }
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...