是否可以对Firebase数据进行排序并将其应用于Android Studio上的实时数据库



我正在尝试在Android Studio端对Firebase DB数据进行排序并实时应用。当我在数据库上进行手动更改时,我的代码会立即成功更新视图,但我想知道我是否可以使用该代码按名称排序。我认为orderByChild是执行此操作的功能,但它不会更改数据库。

从 Firebase 获取数据并显示以下内容的函数:

private void fetchRepoData(String profileUserID) {
    profileUserDatabase = repoReference.child(profileUserID);
    //DatabaseReference reposReference = profileUserDatabase.child("Repos");
    profileUserDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            repoListItems.clear();
            repoNameList.clear();
            userNameList.clear();
            descriptionList.clear();
            Toast.makeText(getActivity(), "changed", Toast.LENGTH_SHORT).show();
            for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
                repoNameList.add(snapshot.getValue(RepoInfo.class).getRepoName());
                userNameList.add(snapshot.getValue(RepoInfo.class).getOwner());
                descriptionList.add(snapshot.getValue(RepoInfo.class).getDescription());
            }
            for(int i = 0; i < repoNameList.size(); i++) {
                repoListItems.add(new RepositoryItem(i, repoNameList.get(i), userNameList.get(i), descriptionList.get(i)));
            }
            adapter.notifyDataSetChanged();
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
}

用于按名称排序的单选按钮

    sortByNameRadio.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    repoReference.child("subchild").orderByChild("name");
                    adapter.notifyDataSetChanged();
                }
            }
    );

当你调用orderByChild()时,它会返回一个新的Query对象。需要存储引用并附加查询对象的侦听器。

profileUserDatabase = repoReference.child(profileUserID);
Query query = repoReference.child("subchild").orderByChild("name");
query.addValueEventListener(new ValueEventListener() {
    for(DataSnapshot snapshot: dataSnapshot.getChildren()) {
        System.out.println(snapshot.getKey());
        ...

最新更新