因此,我目前正在尝试为包含多个UserProfile
类对象的Android Studio应用制作Firebase数据库,每个类对象包含4个属性,即用户名,密码,secretQuestion和secretAnswer。我可以将这些对象添加到数据库中,每个对象都有一个唯一的密钥,没有问题,但我需要在登录时检查它们中的每一个。我使用返回UserProfile列表的ValueEventListener创建了一个检索方法。当我在登录页面中单击登录时,该方法始终返回空列表,在重新启动应用程序或玩某些页面后,当我尝试登录时,应用程序崩溃。我无法找到该方法的问题...
以下是获取数据的方法:
public static List<UserProfile> readUserProfile()
{
final List<UserProfile> profiles = new ArrayList<UserProfile>();
DatabaseReference getProfile;
getProfile = CreateProfile1.database.getReference();
getProfile.child( "UserProfiles").addValueEventListener( new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> children = dataSnapshot.getChildren();
for ( DataSnapshot child : children )
{
UserProfile aProfile = child.getValue( UserProfile.class);
profiles.add( aProfile);
}
}
@Override
public void onCancelled(DatabaseError databaseError)
{
Log.e("The read failed: ", databaseError.getMessage());
}
});
return profiles;
}
这是我的登录检查:
loginProfiles = CreateProfile2.readUserProfile();
for ( int i = 0; i < loginProfiles.size(); i++ )
{
if ( loginProfiles.get( i).getUsername().equals( usernameField.getText().toString() ) &&
loginProfiles.get( i).getPassword().equals( passwordField.getText().toString() ) )
{
Intent goToMainPage;
goToMainPage = new Intent(LoginPage.this, MainMenu.class);
startActivity(goToMainPage);
}
}
答案 0 :(得分:0)
Firebase数据库 异步执行此类操作,如果您要登录,请使用 FirebaseAuth 。 Firebase Auth
getProfile.child( "UserProfiles").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s){
UserProfile userProfile = dataSnapshot.getValue( UserProfile.class);
if ( userProfile.getUsername().equals( usernameField.getText().toString() ) &&
userProfile.getPassword().equals( passwordField.getText().toString() ) )
{
Intent goToMainPage = new Intent(LoginPage.this, MainMenu.class);
startActivity(goToMainPage);
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});