返回

firebase-在 Firabase DB Java 中检查子项的值

发布时间:2022-08-07 11:54:56 209
# 移动端

我正在尝试从我的数据库中选择数据,并且我想检查特定子节点的值是 1 还是 0。如果它有一个 1 那么我不想显示来自该特定用户的信息。如果它为零,那么我想显示来自该特定用户的信息。

我是在我正在研究的方法之上的一种方法中做到的(我遵循了这个答案How to get child of child value from firebase in android?),我让它工作没问题。但是我不能对我的其他方法做同样的事情,我现在整天都在尝试。

截至目前,我得到的唯一结果是列表根本没有出现。有人可以帮帮我吗 ?

有效的方法:

private void getPosts() {

    followingList = new ArrayList<>();

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Video_Posts");
    FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();

    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            myPosts.clear();
            //followingList.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                Post post = snapshot.getValue(Post.class);
                if (followingList.isEmpty()) {

                    if (!post.getPublisher().equals(firebaseUser.getUid())) {

                        DatabaseReference zonesRef = FirebaseDatabase.getInstance().getReference("Users");
                        DatabaseReference zone1Ref = zonesRef.child(post.getPublisher());
                        DatabaseReference zone1NameRef = zone1Ref.child("acc_closed");

                        zone1NameRef.addValueEventListener(new ValueEventListener() {
                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                //Log.i(TAG, dataSnapshot.getValue(String.class));

                                if (dataSnapshot.getValue(String.class).equals("1")) {

                                    //Toast.makeText(getContext(), "Account closed", Toast.LENGTH_SHORT).show();
                                } else if (dataSnapshot.getValue(String.class).equals("0")) {

                                    //Toast.makeText(getContext(), "Not closed.", Toast.LENGTH_SHORT).show();

                                    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

                                    Query query = rootRef
                                            .child("Follow")
                                            .child(firebaseUser.getUid())
                                            .child("following")
                                            .child(post.getPublisher());

                                    ValueEventListener valueEventListener = new ValueEventListener() {
                                        @Override
                                        public void onDataChange(DataSnapshot dataSnapshot) {
                                            if (dataSnapshot.exists()) {
                                                //Do something
                                                Toast.makeText(getContext(), "Following.", Toast.LENGTH_SHORT).show();

                                            } else {
                                                //Do something else
                                                myPosts.add(post);
                                                Collections.shuffle(myPosts);
                                                //Toast.makeText(getContext(), "Something.", Toast.LENGTH_SHORT).show();
                                            }
                                        }

                                        @Override
                                        public void onCancelled(DatabaseError databaseError) {
                                        }
                                    };
                                    query.addListenerForSingleValueEvent(valueEventListener);
                                }
                            }

                            @Override
                            public void onCancelled(DatabaseError databaseError) {
                                //Log.w(TAG, "onCancelled", databaseError.toException());
                            }
                        });

                    } else if (myPosts == null) {
                        Toast.makeText(getContext(), "Nothing.", Toast.LENGTH_SHORT).show();
                    }

                } else {
                    Toast.makeText(getContext(), "List is not empty.", Toast.LENGTH_SHORT).show();

                    for (String id : followingList) {

                        assert post != null;
                        if (!post.getPublisher().equals(id)) {
                            myPosts.add(post);
                            Toast.makeText(getContext(), "Something.", Toast.LENGTH_SHORT).show();

                        } else if (myPosts == null) {
                            Toast.makeText(getContext(), "Nothing.", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            }

            adapterExplorer.notifyDataSetChanged();
            progressBar.setVisibility(View.GONE);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
        }
    });
}

不起作用的方法:

private void searchUsers(String s) {

    Query query = FirebaseDatabase.getInstance().getReference("Users");

    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            if (search_bar.getText().toString().equals("")) {
                recyclerView.setVisibility(View.INVISIBLE);
            }

            mUsers.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                User user = snapshot.getValue(User.class);

                DatabaseReference zonesRef = FirebaseDatabase.getInstance().getReference("Users");
                DatabaseReference zone1Ref = zonesRef.child(user.getId());
                DatabaseReference zone1NameRef = zone1Ref.child(user.getAcc_closed());

                //mUsers.add(user);
                zone1NameRef.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapS) {

                        if (snapS.getKey().equals("1")) {

                        } else if (snapS.getKey().equals("0")){

                            //if (!snapS.exists()) {
                                Log.d("TAG", snapS.toString());
                                mUsers.add(user);
                            //}
                        }
                        //}
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {

                        Log.d("Error name", error.getMessage());
                    }
                });
            }

            userAdapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

            Log.d("Error name", error.getMessage());
        }
    });
}

数据库:

"Users": {
"4mFQt8Lf3CTNrQF74sy8wwyFoLh1": {
  "acc_closed": "0",
  "bio": "",
  "dateAdded": "19-06-2022 17:28:56",
  "date_time": 1655674136805,
  "device_token": "feGjHNzaR7S8yaV2HKg0rt:APA91bEXAiYwT52niHVxR2ENrcaKXSNs11Z5ss-g2gsDwTs4wbjqjcrN4ZUmemqiMzp6SZM6UXD5TFrc1JND_DoEgd-Ni9wMeCa73EzvKBAaj5aXJf1GjgjSsTVwBg1A6VvhvVwF1VSX",
  "fullname": "Brandon",
  "id": "4mFQt8Lf3CTNrQF74sy8wwyFoLh1",
  "imageurl": "https://img.hake.cc/other_net_images/other_images_skf/default.jpg?alt=media&token=befece91-9248-45ee-ab6f-b1b3d217c6b4",
  "username": "bran1",
  "verified": "false"
},

编辑:

上面的代码(searchUsers)一种工作。当我把文字放进搜索栏时,什么也没有显示。但当我点击后退按钮并移除键盘时,数据显示出来。这就像我在等待数据的变化。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像