早安,
我正在考虑是否根据用户的Student_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表。
您有什么建议可以改善我的代码吗?谢谢。
答案 0 :(得分:1)
由于您已经在查询Pstud_no
,因此无需使用child
中的键来检查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
}