Как получить список строк из базы данных Firebase, содержащих дочерние имена? - PullRequest
0 голосов
/ 04 ноября 2018

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

Database Image

Я хотел бы получить список всех заголовков в 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)
    }
}

1 Ответ

0 голосов
/ 04 ноября 2018

Согласно вашему комментарию, чтобы отобразить детей до 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);

Результат в вашем logcat будет:

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