android - Firebase 条件列表数据检索 android

标签 android firebase firebase-realtime-database firebase-authentication firebaseui

我的 firebase database 中有下表规则

"tests": {
  "$user_id": {
    ".read": "$user_id===auth.uid",
    ".write": "$user_id===auth.uid",

    "$testId": {
      "duration": {
        ".validate": "newData.val().length>1"
      },
      "date": {
        ".validate": "newData.val().length>1"
      },
      "status": {
        ".validate": "newData.val()==='Pending' || newData.val()==='Completed'"
      }
    }
  }
},

基本上tests表将有 2 个状态,pendingcompleted并且用户在应用程序中将有 2 个按钮用于表示 test 的相应状态.

我有以下 FirebaseRecyclerAdapter列出数据。

final DatabaseReference testsRef = FirebaseDatabase.getInstance().getReference(Constants.TEST_TABLE).child(FirebaseAuth.getInstance().getCurrentUser().getUid());
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter <Tests, TestListHolder > (
  Tests.class,
  R.layout.test_list_card,
  TestListHolder.class,
  testsRef
) {
  @Override
  protected void populateViewHolder(final TestListHolder viewHolder, final Tests model, final int position) {
      testsRef.child(adapter.getRef(position).getKey()).orderByChild("status")
      .equalTo(viewType).addValueEventListener(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot dataSnapshot) {
        //fill the view data
      }

      @Override
      public void onCancelled(DatabaseError databaseError) {
      }
    });

  }
};

所以每当按下 PendingCompleted按钮,我会路过viewType值为 Pending/Completed分别。但是上面的orderByChild不起作用,每次都会在两个 View 中获取所有数据,我相信没有获取正确的数据库引用。有人可以帮助我实现这一目标吗?

如果有人坚持,这里是示例数据:

"jxW41BgS12edasWtUkZA2G0eLhf2" : { //logged in user id
    "-KfFFioKvMDlAyqw43Yb" : { //testid
      "duration" : 4,
      "date" : 1489552731888,
      "status" : "Completed"
    },
    "-KfFGqIdenjwNdfs232EQ" : {//testid
      "duration" : 5,
      "date" : 1489552731888,
      "status" : "Pending",
    }
  }

最佳答案

只显示挂起的测试:

DatabaseReference testsRef = FirebaseDatabase.getInstance().getReference(Constants.TEST_TABLE).child(FirebaseAuth.getInstance().getCurrentUser().getUid());
Query pendingTestsQuery = testsRef.orderByChild("status").equalTo(viewType);
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter <Tests, TestListHolder > (
  Tests.class,
  R.layout.test_list_card,
  TestListHolder.class,
  pendingTestsQuery
) {
  @Override
  protected void populateViewHolder(final TestListHolder viewHolder, final Tests model, final int position) {
      // TODO: display model in the viewHolder

  }
};

关于android - Firebase 条件列表数据检索 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42873245/

相关文章:

android - 水平翻转 TextView

java - 如何在android中构建CLM

angularjs - $firebaseAuth().$getAuth() 返回 null

android - 像地理围栏一样使用 geofire

ios - 无论 Firebase 中有多少 child ,都可以获取信息(Swift)

android - 无法复制 list

android - 如何解决 Android 中转换为 Dalvik 格式失败并出现错误 1 ​​的问题?

javascript - 函数中的 Firebase 查询未按预期返回

javascript - Firebase 数据库安全规则允许匿名访问和 Web 访问

javascript - Angular 2 : Using Set? 浏览器兼容性和迭代不可能