簡體   English   中英

如何檢查 firebase 數據庫中是否有值?

[英]How can I check if a value is there in my firebase database?

我正在制作一個問答應用程序。 用戶可以喜歡一個問題。 如果用戶喜歡它,那么在 firebase 中,它會存儲在 likeBy 中。 我一直在檢查用戶是否已經喜歡這個問題,如果是,那么“喜歡”按鈕將是綠色的。 但這並沒有發生。 當我再次點擊喜歡按鈕時,有兩個人用相同的用戶名點過贊。 請幫忙。

Firebase 數據庫

databaseReference.child("questions").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            if (snapshot.exists()) {
                for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                    if (dataSnapshot.child("question").getValue().toString().equals(question) && dataSnapshot.child("askedBy").getValue().toString().equals(username)
                            && dataSnapshot.child("likes").getValue().toString().equals(likes)) {
                        if (dataSnapshot.child("likedBy").hasChild(currentUser[0])) {
                            liked = true;
                            like.setImageResource(R.drawable.like_selected);
                        } else {
                            liked = false;
                            like.setImageResource(R.drawable.like_not_selected);
                        }
                    }
                }
            }
        }

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

        }
    });

    like.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (liked) {
                databaseReference.child("questions").addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        if (snapshot.exists()) {
                            for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                                if (dataSnapshot.child("question").getValue().toString().equals(question) && dataSnapshot.child("askedBy").getValue().toString().equals(username)
                                        && dataSnapshot.child("likes").getValue().toString().equals(likes)) {
                                    dataSnapshot.getRef().child("likedBy").child(currentUser[0]).removeValue();
                                    int liken = Integer.parseInt(likes) - 1;
                                    dataSnapshot.child("likes").getRef().setValue(liken).addOnCompleteListener(new OnCompleteListener<Void>() {
                                        @Override
                                        public void onComplete(@NonNull Task<Void> task) {
                                            if (task.isSuccessful()) {
                                                likes = Integer.toString(liken);
                                                numberOfLikes.setText(likes);
                                                like.setImageResource(R.drawable.like_not_selected);
                                            }
                                        }
                                    });
                                }
                            }
                        }
                    }

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

                    }
                });
            } else {
                databaseReference.child("questions").addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        if (snapshot.exists()) {
                            for (DataSnapshot dataSnapshot : snapshot.getChildren()) {
                                if (dataSnapshot.child("question").getValue().toString().equals(question) && dataSnapshot.child("askedBy").getValue().toString().equals(username)
                                        && dataSnapshot.child("likes").getValue().toString().equals(likes)) {
                                    int numberOfUsers = (int) dataSnapshot.child("likedBy").getChildrenCount() + 1;
                                    dataSnapshot.child("likedBy").child(String.valueOf(numberOfUsers)).getRef().setValue(currentUser[0]);
                                    int liken = Integer.parseInt(likes) + 1;
                                    dataSnapshot.child("likes").getRef().setValue(liken);
                                    databaseReference.child("users").addListenerForSingleValueEvent(new ValueEventListener() {
                                        @Override
                                        public void onDataChange(@NonNull DataSnapshot snapshot) {
                                            if (snapshot.exists()) {
                                                for (DataSnapshot dataSnapshot1 : snapshot.getChildren()) {
                                                    if (dataSnapshot1.child("username").getValue().toString().equals(username)) {
                                                        int points = Integer.parseInt(dataSnapshot1.child("points").getValue().toString()) + 5;
                                                        numberOfPointsGained += 5;
                                                        dataSnapshot1.child("points").getRef().setValue(points).addOnCompleteListener(new OnCompleteListener<Void>() {
                                                            @Override
                                                            public void onComplete(@NonNull Task<Void> task) {
                                                                if (task.isSuccessful()) {
                                                                    likes = Integer.toString(liken);
                                                                    numberOfLikes.setText(likes);
                                                                    like.setImageResource(R.drawable.like_selected);
                                                                    leaderBoard();
                                                                }
                                                            }
                                                        });
                                                    }
                                                }
                                            }
                                        }

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

                                        }
                                    });
                                }
                            }
                        }
                    }

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

                    }
                });
            }
        }
    });

提前致謝。

如果您談論如何檢查值,您可以像這樣 go

您正在尋找的orderByChild

ref.child("Users").orderByChild("IDorKEY").equalTo("nameORkeyID").once("value",snapshot => {
   if (snapshot.exists()){
    //Existed dont add or do something
    }
});

我不是 firebase 專業人士,但我認為您可以使用以下邏輯:

首先創建一個名為 onClickLikeBtn 的onClickLikeBtn 那么在這個function里面,你要根據已有的值來切換state之類的。 例如,如果實際的 state 是like==true ,則必須將其切換為like==false 波紋管是可用於此邏輯的示例 function:

public function onClickLikeBtn (Boolean like){
  return !like;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM