代码之家  ›  专栏  ›  技术社区  ›  Rajdeep

如何从firebase数据库中检索包含子名称的字符串列表?

  •  1
  • Rajdeep  · 技术社区  · 7 年前

    我正在Kotlin开发一个应用程序,并且已经建立了我的Firebase数据库。我可以将数据写入数据库,但无法从中读取数据。以下是我的数据库图像:

    Database Image

    我想检索一个列表中的所有标题 Basics Functions Loops 基础 ? 我想要一个包含字符串的字符串列表 Condition 和 Datatype . 我只需要他们为特定部分完成的主题的名称(在本例中是 ). 所以基本上,我需要孩子的名字 基础 , 功能 和 循环 .

    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 回复  |  直到 7 年前
        1
  •  3
  •   Alex Mamo    7 年前

    根据您的评论,显示下的孩子 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