0
私はFirebaseを使用しています。ログイン画面では、ユーザーが正しいログイン資格情報を入力したときに呼び出されるメソッドがあります(そのメソッドはFirebaseスレッドを起動してメイン画面に必要な情報)メイン画面が開いたら、その方法が完了するまで待つ必要があります。私は何らかの旗や何かが必要です。私のコードを貼り付けましょう:Firebaseスレッドの状態が必要
Login.java:
mProgress.setMessage("Verificando Datos Usuario...");
mProgress.show();
mAuth.signInWithEmailAndPassword(usuario, pass)
.addOnCompleteListener(Login.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (!task.isSuccessful()) {
Toast.makeText(Login.this, "Los Datos administrados no son correctos",
Toast.LENGTH_SHORT).show();
mProgress.dismiss();
} else{
Toast.makeText(Login.this, "Bienvenido... ",
Toast.LENGTH_SHORT).show();
AdminFirebase.loadAdmin(task.getResult().getUser());
mProgress.dismiss();
Intent intento=new Intent(Login.this, Principal.class);
startActivity(intento);
}
}
});
AdminFirebase.java:
public static void loadAdmin(FirebaseUser user){
DatabaseReference userRef=adminRef.child(user.getUid());
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Administrador administrador=dataSnapshot.getValue(Administrador.class);
Sesion.admin=administrador;
Sesion.admin.loadTaxis();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
私はクラスTaxifirebase.java上it'sを実行するために、最後まで待つ必要が方法:事前に
public static void loadTaxis(List<String> chapas){
for (String chapa :chapas) {
DatabaseReference taxiref=childRef.child(chapa);
taxiref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Taxi taxi=dataSnapshot.getValue(Taxi.class);
Sesion.taxis.add(taxi);
}
}
感謝。
私はロジックのためにそれを必要とします。メインクラスのデータを持つためにスレッドを終了する必要があります。単純なブール値を使用すると、スレッドの外側にはアクセスできません。 –
次にブール値です。スレッド内でブール値を必要としません。クラスとPOOについてのJavaアクセス修飾子+知識を読まなければなりません。プログラムやアプリケーションで使用できるフラグを作成できます – josedlujan