2016-08-05 5 views
0

子リスナーがデータを読み込んでロードする前にFirebaseリファレンスを設定しようとしています。私はonCreateがonResumeの前にあることを知っていますが、下のコードは私のonResume()で設定したものと同じですので、下のコードと矛盾しているようです。 onCreateで設定したものは、onCreate()にあるものよりも前にはありません。データロード前にノードに子ノードがあるかどうかに応じてFirebaseの参照を変更する

なぜですか?

他のノードにまだユーザーとして登録されていないユーザーがいる場合は、データベースのテンプレートから読み取ろうとしています。 ヒントをいただければ幸いです。

p.s.私は参照をログアウトして、OnResume()内のログインも最初に行っています。

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.services_activity); 


    app = FirebaseApp.getInstance(); 
    database = FirebaseDatabase.getInstance(app); 
    auth = FirebaseAuth.getInstance(app); 
    storage = FirebaseStorage.getInstance(app); 
    username = auth.getCurrentUser().getUid(); 


    databaseRef = database.getReference("serv_hst"); 
    servTempltRef = database.getReference("serv_tmplt"); 

    databaseRef.child(username).addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

      //I am trying to set my reference that I will use in OnResume() ..!! 

      if (dataSnapshot.hasChildren()) { 
       servTempltRef = database.getReference("serv_hst"); 
      } 
     } 

     @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) { 
     } 
     });   
     } 

@Override 
protected void onResume() { 
    super.onResume(); 


    servTempltRef.addChildEventListener(new ChildEventListener() { 
     @Override   
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
     } 

     @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) { 
     } 
    }); 

答えて

0

onChildAdded(内部コード)は、データがFirebaseデータベースからダウンロードされます場合にのみ、非同期に実行されます。 したがって、実行フローでは.addChildEventListener()メソッドがある行が実行され、次の行が続行されます... あなたのケースでは、onCreate()には他に実行される行。したがって、アクティビティのライフサイクルのために、必要なデータなしでonResume()メソッドが実行されます。

+0

コメントをいただきありがとうございます。私は今かなりの初心者でしたが、私は今ではありません。とにかくコメントを評価する – TheeBen

関連する問題