Я разрабатываю приложение на Kotlin и уже настроил свою базу данных Firebase. Я могу записывать данные в свою базу данных, однако я не могу читать из нее данные. Вот изображение моей базы данных:
Я хотел бы получить список всех заголовков в Basics, Functions или Loops. Для большего контекста это приложение, чтобы научить людей программировать на Kotlin, и на вкладке прогресса я в основном перечисляю все темы, которые пользователь завершил в моем приложении. Итак, как я могу запросить свою базу данных, чтобы получить список всех заголовков, перечисленных, скажем, под Basics? Я бы хотел, чтобы список строк содержал строки Condition и Datatype. Мне просто нужны названия тем, которые они завершили для этого конкретного раздела (в данном случае это Basics). В общем, мне нужны дочерние имена Basics, Functions и Loops.
Мой класс прогресса:
package nus.is3261.kotlinapp
import com.google.firebase.database.IgnoreExtraProperties
@IgnoreExtraProperties
class Progress {
var completed: String? = null
constructor() {
// Default constructor required for calls to DataSnapshot.getValue(Post.class)
}
constructor(time: String) {
this.completed = time
}
}
Как я записываю данные в свою базу данных:
/**
* For firebase database
*/
private fun submitProgress(str: String, chapter: Int) {
val currentUser = mAuth!!.currentUser
// if user is not logged in, don't write
currentUser?:return
val time = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Calendar.getInstance().time)
val progress = Progress(time)
when(chapter){
1 -> mProgressReference!!.child(currentUser.uid!!).child("Progress").child("Basics").child(str).setValue(progress)
2 -> mProgressReference!!.child(currentUser.uid!!).child("Progress").child("Loops").child(str).setValue(progress)
3 -> mProgressReference!!.child(currentUser.uid!!).child("Progress").child("Functions").child(str).setValue(progress)
}
}
@AlexMamo Привет, мне нужны имена всех детей младше Basics, Functions и Loops. Я намерен создать раздел Chart, в котором будут отображаться завершенные темы. Итак, я собираюсь запросить базу данных, чтобы получить имена всех завершенных тем.
Итак, каков ожидаемый результат? Какие точные значения вы хотите отобразить?
@AlexMamo Итак, я запрашиваю свою базу данных и получаю список строк со всеми завершенными темами, а именно: Condition, Data Type, Recursion, When, While. Затем я использую эти данные для построения диаграммы, сообщая пользователям, какую главу они завершили, а какую еще не завершили.
@AlexMamo Это несколько похоже на ваш ответ здесь, где мне нужны только дочерние имена: stackoverflow.com/questions/43586595/…
Я так понимаю, напишу вам ответ прямо сейчас.
Согласно вашему комментарию, для отображения детей под Basics, Functions и Loops используйте следующий код:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference progressRef = rootRef.child("Users").child(uid).child("Progress");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
for(DataSnapshot ds : dSnapshot.getChildren()) {
String key = ds.getKey();
Log.d(TAG, key);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage());
}
};
progressRef.addListenerForSingleValueEvent(valueEventListener);
Результат в вашем логарифме будет:
Condition
Data Type
Recursion
When
While
Чтобы лучше понять, вы хотите отобразить только:
Basics,FunctionsиLoops, которые существуют в узлеProgress?