Android 检查firebase中是否存在数据

Android 检查firebase中是否存在数据,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,你好 我想验证一个用户是否根据其学生id投票。我尝试将数据检索到android studio,但总是落在其他人身上 这是我的密码: @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { switch (item.getItemId()) { case R.id.voter_home: Fragment_Voter_Ho

你好

我想验证一个用户是否根据其学生id投票。我尝试将数据检索到android studio,但总是落在其他人身上

这是我的密码:

 @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.voter_home:
                Fragment_Voter_Home fragment = Fragment_Voter_Home.newInstance(Pstud_no);
                getSupportFragmentManager().beginTransaction().replace(R.id.voter_fragment,
                        fragment).commit();
                break;
            case R.id.nav_voter_ssc_president:
                userReference = FirebaseDatabase.getInstance().getReference("vote");
                Query VerifySSCPresident = userReference.orderByChild("student_id").equalTo(Pstud_no);
                VerifySSCPresident.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        if (dataSnapshot.child(Pstud_no).exists())
                        {
                            Toast.makeText(Voter_Screen.this, "Already Voted", Toast.LENGTH_SHORT).show();
                        }
                        else
                        {
                            Intent intent = new Intent(Voter_Screen.this, Voter_SSC_President.class);
                            startActivity(intent);
                        }
                    }
                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });
                break;
            case R.id.nav_voter_csc_president:
                    Intent intent1 = new Intent(Voter_Screen.this, Voter_CSC_President.class);
                    startActivity(intent1);
                break;
        }

        drawer.closeDrawer(GravityCompat.START);
        return true;
    }
Pstud_no是当前用户

这是我的Firebase桌子


你有什么建议可以改进我的代码吗?谢谢。

因为您已经在查询
Pstud\u no
,所以您不必在
onDataChange
中用该键检查
子节点。相反,您只需检查查询是否返回了存在的数据快照:

Query VerifySSCPresident = userReference.orderByChild("student_no").equalTo(Pstud_no);
VerifySSCPresident.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            Toast.makeText(Voter_Screen.this, "Already Voted", Toast.LENGTH_SHORT).show();
        }
        else {
            Intent intent = new Intent(Voter_Screen.this, Voter_SSC_President.class);
            startActivity(intent);
        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException(); // don't ignore errors
    }

嘿,伙计,你的代码行得通。我的错。orderByChild(“学生id”)应该是orderByChild(“学生编号”)。好消息:代码中的参数确实需要与JSON中的属性名称匹配。我在答案中修正了它。