2017-01-30 12 views
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); 

        } 

} 

感謝。

答えて

0

フラグがある場合はLogクラスを使用できます。

プログラムのロジックが必要な場合は、ブール値を使用して、必要なときにtrueに変更してください。その後、値を確認することができます。

+0

私はロジックのためにそれを必要とします。メインクラスのデータを持つためにスレッドを終了する必要があります。単純なブール値を使用すると、スレッドの外側にはアクセスできません。 –

+0

次にブール値です。スレッド内でブール値を必要としません。クラスとPOOについてのJavaアクセス修飾子+知識を読まなければなりません。プログラムやアプリケーションで使用できるフラグを作成できます – josedlujan

関連する問題