Введение
Я делаю приложение для школы, и я выбрал Firebase из-за их обширных видео и онлайн-материалов, которые могут вам помочь. Но подобные проблемы, когда вы новичок в чем-то, могут быть решены здесь более опытными людьми.
Что я понял до сих пор
Я хочу получить случайные данные объект из базы данных в реальном времени от Firebase. Я видел другие посты, предлагающие примеры, включенные в обучающие видео, но ни одна из них не работает для меня:
У меня есть БД с вопросами, загруженными пользователями со следующей структурой: ![](https://i.stack.imgur.com/Ezf5r.png)
(Забудьте, почему он говорит сообщения вместо вопросов, так как я построчно следил за их учебниками, пытаясь достичь sh моей цели)
Чтобы получить данные, вы должны создать ссылка на БД как:
//DB Object
private FirebaseDatabase mFirebaseDatabase;
//This will only reference the message part of the DB
private DatabaseReference mQuestionsDBReference;
и инициализация его как:
private void loadQuestionsDB() {
//Access point
mFirebaseDatabase = FirebaseDatabase.getInstance(); //Instanciate the object
mQuestionsDBReference = mFirebaseDatabase.getReference().child("messages"); //Only reference the
"messages" part
//System.out.println("[DEBUG] " + mQuestionsDBReference.getDatabase());
}
(здесь я инициализирую все в функции, которая позже вызывается onCreate()
)
Чтобы выбрать случайный вопрос из БД, я выбрал следующее решение:
private void loadRandomQuestion() {
mQuestionsDBReference.startAt(randomNumber()).limitToFirst(1).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.getChildrenCount() > 0) {
System.out.println("[DEBUG-PLAY] Cargando!");
for(DataSnapshot dataSnap : dataSnapshot.getChildren()){
//Something I tried so maybe that was the problem I was facing :(
String question = dataSnap.child("-M3qlTuWw9TkD-LwQWYA").child("question").getValue().toString();
String answer1 = dataSnap.child("answer1").getValue().toString();
String answer2 = dataSnap.child("answer2").getValue().toString();
String answer3 = dataSnap.child("answer3").getValue().toString();
String answer4 = dataSnap.child("answer4").getValue().toString();
questionViewTxt.setText(question);
radioButton1.setText(answer1);
radioButton2.setText(answer2);
radioButton3.setText(answer3);
radioButton4.setText(answer4);
}
} else {
System.out.println("[DEBUG] No children :/, that's a problem right there...");
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Проблема и цель
Я не могу успешно получить случайный вопрос из БД ни тот, который мне нужен.
Цель состоит в том, чтобы иметь возможность получать случайный вопрос каждый раз, когда я нажимаю кнопку или вызываю функцию loadRandomQuestion()
.
Примечания
- Instead of System.out.println() I could use Log
- Instead of the above I could use the debugger
- I know there are multiple listeners for referencedDB
- I am at beginner level in this subject (3 days since this post)
- I'm using Andriod Studio