Firebase数据库不会按时返回对象

时间:2016-12-28 10:10:16

标签: android firebase firebase-realtime-database

我正在尝试在用户创建帐户时存储用户的信息,直到现在我有一项活动,当用户登录时,检查用户是否已经存在于数据库中,以及如果用户没有#39 ; t存在它将新数据存储在数据库中。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        // Obtain the FirebaseAnalytics instance.
        mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);

        //Obtain the FirebaseAuth instance.
        mAuth = FirebaseAuth.getInstance();
        authUI = AuthUI.getInstance();

        FactoryMyVoto factoryMyVoto=new FactoryMyVotoFirebase();

        //Get user service 
        final UsuarioService uS= factoryMyVoto.getUsuarioService();


        mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    // User is signed in

                       //PROBLEM HERE Check if the user is stored already on the database
                       Usuario userFirebase= uS.getUsuario(user.getUid());
                    if (userFirebase==null ){
                       uS.createNewUser();
                       Log.w("Login","usuario CREADO");

                    }else{
                        Log.w("Login","usuario RECONOCIDO");
                    }

                    Log.d("Login", "onAuthStateChanged:signed_in:" + user.getUid());
                    a.show();
                    startActivity(new Intent(LoginActivity.this, ListaPopuestasActivity.class));
                } else {
                    // User is signed out
                    b.show();
                    Log.d("Login", "onAuthStateChanged:signed_out");
                }
            }
        };

        // ATTENTION: This was auto-generated to implement the App Indexing API.
        // See https://g.co/AppIndexing/AndroidStudio for more information.
        client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
    }

用户服务的代码如下:

public Usuario getUsuario(String idUsuario) {
        final ArrayList<Usuario> usuarios=new ArrayList<>();

        DatabaseReference myRef = database.getReference(USUARIOS_FIREBASE).child(idUsuario);
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Usuario usuario = dataSnapshot.getValue(Usuario.class);
                usuarios.add(0,usuario);
                Log.d("UsuarioService","Usuario obtenido");
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                Log.d("UsuarioService","Usuario NO obtenido");
            }
        });
        if (!usuarios.isEmpty()){
            return usuarios.get(0);
        }else{
            return null;
        }
    }

这里的问题是,当我打电话给服务时,检查用户是否存储,我没有收到数据,数据是在第一次调用方法后加载的,所以所有创建活动的时间我总是得到用户不存在的信息。

我需要做什么才能及时收到数据?就在我打电话给方法的时候。

还有另一种方法可以在不使用arrayList的情况下返回数据吗?

提前致意并表示感谢。

0 个答案:

没有答案