【问题标题】:I wanted to retrieve data . But I don't know how to do it with this data structure我想检索数据。但我不知道如何使用这种数据结构
【发布时间】:2021-07-25 12:38:08
【问题描述】:

这是我检索数据的代码。如果我使用日历来检索当前月份和当年的数据,这可能吗?

fun getTransaction(){
    val cal = Calendar.getInstance()
    val currentMonth = cal.get(Calendar.MONTH)
    val currentYear = cal.get(Calendar.YEAR)
    val uid = auth.currentUser!!.uid
    val key = FirebaseDatabase.getInstance().getReference("Bill").child(uid).push().key!!
    val ref= database.getReference("Bill").child(uid).child(key)

    ref.addListenerForSingleValueEvent(object : ValueEventListener{
        override fun onDataChange(snapshot: DataSnapshot) {
            var history = StringBuilder()
            for (item in snapshot.children){
                var category = item.child("category").getValue()
                var expense = item.child("expense").getValue()
                var date = item.child("date").getValue()
                history.append("Category: $category \n Expense: $expense \n Date: $date \n\n")
            }
            tvHistory.setText(history)

【问题讨论】:

    标签: android firebase kotlin firebase-realtime-database


    【解决方案1】:

    这不起作用:

    val key = FirebaseDatabase.getInstance().getReference("Bill").child(uid).push().key!!
    

    但如果你已经知道年份和月份,你可以使用:

    • child("2021") 获取当前年份的参考。
    • orderByChild("month").equalTo("6") 获取与月份匹配的节点。

    比如:

    val ref= database.getReference("Bill").child(uid).child("2021")
    val query = ref.orderByChild("month").equalTo("6")
    query.addListenerForSingleValueEvent(object : ValueEventListener{
      ...
    

    据我所知,您的其余代码可以保持不变。

    【讨论】:

    • 所以我不能像“.child(currentYear.toString()).orderByChild('month').equalTo(currentMonth.toString())”这样使用
    【解决方案2】:

    1.添加firebase依赖

    implementation platform('com.google.firebase:firebase-bom:28.3.0')
    

    2。将数据库引用声明为全局变量

    private DatabaseReference db;
    

    3。数据检索。

    db= FirebaseDatabase.getInstance().getReference().child("bapECvhg2tebnJr1BTGL9E7mioh1")
                    .child("MfS_53SPFJyvMb748kM").child("2021");
            Workout.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot snapshot) {
                   String month=snapshot.child("month").getValue().toString();
                }
                @Override
                public void onCancelled(@NonNull DatabaseError error) {
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      相关资源
      最近更新 更多