Firebase数据库将多个对象检索为列表

时间:2018-05-03 19:41:17

标签: java android firebase firebase-realtime-database

因此,我目前正在尝试为包含多个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);
                    }
                }

1 个答案:

答案 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) {

                        }
                    });