有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java选择下一个值firebase 安卓

我想得到第一个注册,然后当用户点击下一步按钮时,第二个注册,依此类推

我有这个:

 <Button
        安卓:id="@+id/button"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:layout_marginTop="47dp"
        安卓:onClick="next"
        安卓:text="Button" />

这是:

public void next(View view) {
    read();
}

我的火力基地是:

private void read() {

    mDatabase.child("question").child("cf").orderByKey().limitToFirst(1).addListenerForSingleValueEvent(new ValueEventListener() {

    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        for (DataSnapshot recipeSnapshot: dataSnapshot.getChildren()) {

            lastKey = recipeSnapshot.getKey();

            String pergunta = Objects.requireNonNull(recipeSnapshot.child("question").getValue()).toString();
            Toast.makeText(MainActivity.this, pergunta, Toast.LENGTH_SHORT).show();    
        }
    }    
});

所以当用户打开活动时,我想显示第一个值,当他点击按钮时,我想显示第二个值,依此类推

有什么办法解决这个问题吗


共 (1) 个答案

  1. # 1 楼答案

    您已经了解了如何限制Firebase返回的数据量:.limitToFirst(1)

    不获取Firebase中的下一项,您需要知道从哪个项开始返回数据。在您的情况下,这意味着您需要:

    1. 知道当前显示的节点的密钥
    2. 检索从该键开始的2个节点

    假设您已经输入了lastKey,您可以使用以下命令读取下一个结果:

    private void read() {
        Query query = mDatabase.child("question").child("cf").orderByKey();
    
        if (lastKey != null) {
            query = query.startAt(lastKey).limitToFirst(2);
        }
        else {
            query = query.limitToFirst(1);
        }
    
        query.addListenerForSingleValueEvent(new ValueEventListener() {
          @Override
          public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot recipeSnapshot: dataSnapshot.getChildren()) {
                lastKey = recipeSnapshot.getKey();
    
                String pergunta = Objects.requireNonNull(recipeSnapshot.child("question").getValue()).toString();
                Toast.makeText(MainActivity.this, pergunta, Toast.LENGTH_SHORT).show();    
            }
          }    
      });