我正在尝试在用户创建帐户时存储用户的信息,直到现在我有一项活动,当用户登录时,检查用户是否已经存在于数据库中,以及如果用户没有#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的情况下返回数据吗?
提前致意并表示感谢。