2017-10-02 4 views
0

私は3つのアクティビティ、Register、Login、Mainを持っています。ユーザーが自分の登録内容を入力すると、成功した登録後に電子メールIDをfirebaseデータベースにプッシュしています。ユーザー詳細が正常にプッシュされます。今ではMainActivity Follを開き、今私は私のMainActivitieのArrayListの中に登録されているすべてのユーザーをretieveしたいFirebaseが1つのアクティビティでデータをプッシュし、別のアクティビティでデータを取得する

mFirebaseDatabase = FirebaseDatabase.getInstance(); 
     mMessagesDatabaseReference = mFirebaseDatabase.getReference().child("loginusers"); 
firebaseAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        if(task.isSuccessful()){ 
         Toast.makeText(RegisterActivity.this,"Registration Success",Toast.LENGTH_LONG).show(); 
         saveDisplayName(); 

         User user = new User(email); 
         mMessagesDatabaseReference.push().setValue(user); 
    ......} 

私RegisterActivityにコードされます。だから私は私のMainActivityにfollコードを書いた

mFirebaseDatabase = FirebaseDatabase.getInstance(); 
     mMessagesDatabaseReference = mFirebaseDatabase.getReference().child("loginusers"); 
mMessagesDatabaseReference.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot snapshot) { 
       contactList.clear(); 
       for (DataSnapshot postSnapshot : snapshot.getChildren()) { 

        User user = postSnapshot.getValue(User.class); 
        if(!contactList.contains(user)){ 
         contactList.add(user); 


        } 

       } 
       for(int i=0;i<contactList.size();i++){ 
        Toast.makeText(getApplicationContext(),"Hi"+contactList.get(i),Toast.LENGTH_SHORT).show(); 
        Log.i("Pritish", "onDataChange: "+contactList.get(i)); 
       } 

      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 



      } 
     }); 

しかし、このメソッドは決して呼び出されません。今、私はRegisterActivityでMainActivityで書かれたコードを書いて、Intentを使ってuserlistを渡すことができますが、ユーザーがLoginActivityを使用している場合に問題を引き起こす可能性があります。 この問題を解決するには

+0

アプリでログアウトオプションを作成しましたか? logoutオプションを指定すると、sharedprefrenceにユーザ登録済みのフラグを設定し、共有フラグでloginフラグを設定します。 – Vij

+0

あなたを取得できませんでした。私はログアウト機能を実装していません – hagrya

答えて

0

を助けてください、あなたはonDataChange()方法でcontactListを宣言して使用する必要があり、それ以外の場合は、常にnull理由も、あなたがリストにそれらのオブジェクトを追加する前に呼び出され、このメソッドの非同期動作のだろう。だからあなたのコードは次のようになります。

mMessagesDatabaseReference.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      List<User> contactList = new ArrayList<>(); 

      for (DataSnapshot postSnapshot : snapshot.getChildren()) { 
       User user = postSnapshot.getValue(User.class); 
       if(!contactList.contains(user)){ 
        contactList.add(user); 
       } 
      } 
      for(int i=0;i<contactList.size();i++){ 
       Toast.makeText(getApplicationContext(),"Hi"+contactList.get(i),Toast.LENGTH_SHORT).show(); 
       Log.i("Pritish", "onDataChange: "+contactList.get(i)); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) {} 
}); 

あなたはその方法の外にその文字列の値を使用したい場合は、このpostから私の答えをご覧ください。

+0

ありがとう、アレックス、それは働いた。 – hagrya

関連する問題