【问题标题】:How to get value from StartAt specifirc position and EndAt specific position in Firebase Android Query如何从 Firebase Android Query 中的 StartAt 特定位置和 EndAt 特定位置获取值
【发布时间】:2020-04-08 18:04:59
【问题描述】:

我无法从我的数据库中获取数据。

我的数据库:

我的代码:

 Query query = FirebaseDatabase.getInstance().getReference("Quotes").startAt(5).endAt(10);
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot data: dataSnapshot.getChildren()){
                        String authorName = data.child("Name").getValue().toString();
                        String quoteGiven = data.child("Quote").getValue().toString();
                        name.setText("- " + authorName);
                        quote.setText(quoteGiven);

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(MainActivity.this, "Loading Quote failed", Toast.LENGTH_SHORT).show();
            }
        });

我想从第 5 个孩子到第 10 个孩子获取我的数据。

我试过了:

Select random entry from Firebase Realtime Database in Java

get random value android firebase java

Firebase queries not working on Android even though the reference retrieves data

但是,它只显示我留下的硬编码文本而不是数据库中的文本?

谁能帮帮我,我不知道我哪里出错了

【问题讨论】:

    标签: java android database firebase firebase-realtime-database


    【解决方案1】:

    尝试使用orderByKey()

    FirebaseDatabase.getInstance().getReference("Quotes").orderByKey().startAt(String.valueOf(5)).endAt(String.valueOf(10));
    

    这应该会为您提供数据库中从第 5 个键到第 10 个键的所有数据。

    来自文档:

    orderByKey()

    按子键排序结果

    https://firebase.google.com/docs/database/android/lists-of-data#sort_data

    【讨论】:

    • 我已经添加了,它仍然没有显示任何数据。然后我在 for 循环上添加了一条 toast 消息,但它没有触发,我在事件侦听器中做错了什么,因为它没有进入 for 循环??
    • 能不能在for循环前加个log,也去掉startat和endAt,测试一下
    • 引起:java.lang.IllegalArgumentException:您必须将 startAt(String value)、endAt(String value) 或 equalTo(String value) 与 orderByKey() 结合使用。不支持其他类型的值或使用带 2 个参数的版本
    • 已修复,FirebaseDatabase.getInstance().getReference("Quotes").orderByKey().startAt(String.valueOf(5)).endAt(String.valueOf(10));
    【解决方案2】:

    要解决这个问题,请更改以下代码行:

    Query query = FirebaseDatabase.getInstance().getReference("Quotes").startAt(5).endAt(10);
    

    Query query = FirebaseDatabase.getInstance().getReference("Quotes")
        .orderByKey().startAt("5").endAt("10");
    

    您传递给startAt()endAt() 方法的键应该始终是字符串而不是而不是数字。

    【讨论】:

      猜你喜欢
      • 2020-05-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-14
      • 2014-04-14
      • 1970-01-01
      相关资源
      最近更新 更多