2016-08-25 21 views
0

誰かのデータベース参照からデータを取得しようとしていますが、onDataChangeを実行すると同期メソッドになります。私は最初にfast_get_innfouserメソッドを実行したい、その後get_all_userとすべての後にroot.addValueEventListener(メソッドをしたい。どのように私はそれを行う必要がありますか?firebaseを使用してデータを同期する方法

コードがあります:

public class chatRooms extends Activity { 

private DatabaseReference root = FirebaseDatabase.getInstance().getReference(); 
private FirebaseDatabase database; 
public FirebaseAuth auth; 
private ChatInfo ChatInfo = new ChatInfo(); 
private ListView listView; 
private ArrayAdapter<String> arrayAdapter; 
private FirebaseUser user; 

private ArrayList<String> all_uid = new ArrayList<>(); 
private User us ; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_chat_rooms); 
    auth = FirebaseAuth.getInstance(); 
    user = auth.getCurrentUser(); 

    if (user != null) { 
     database = FirebaseDatabase.getInstance(); 
     root.runTransaction(new Transaction.Handler() { 
      @Override 
      public Transaction.Result doTransaction(MutableData mutableData) { 
       get_all_user(database.getReference()); 
       fast_get_innfouser(database.getReference(user.getUid())); 
       return null; 
      } 

      @Override 
      public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) { 
       root = database.getReference(user.getUid()).child("chat"); 
      } 
     }); 

    } 


    root.addValueEventListener(new ValueEventListener() { 

      @Override 
      public void onDataChange (DataSnapshot dataSnapshot){ 
      /*........some code here...........*/ 
} 

    }); 
} 



private void get_all_user(DatabaseReference reference) { 
    all_uid = new ArrayList<>(); 
    reference.addValueEventListener(new ValueEventListener() { 

     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()) { 
     //some code here 
      } 

     } 
    }); 
    } 



private void fast_get_innfouser(DatabaseReference myRef) { 

    final Integer[] temp = {1}; 
     myRef.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()) { 
        //some code here 
       } 

JSON:

m2ZN-VWQ2QI.jpg

+0

あなたはデータベースのjsonの例を持っていますか? "friends":{..} – KgaboL

+0

@KgaboL、yes、updates –

+0

@KgaboL、なぜjsonが必要ですか? –

答えて

1

てみてくださいムーブget_all_user(database.getReferenceは());メソッド内のonDataChangeメソッドfast_get_innfouserメソッド

2

これはRXjavaの大きなユースケースのようです。

https://gist.github.com/gsoltis/86210e3259dcc6998801 https://github.com/nmoskalenko/rxFirebase

次にあなたがzip/concatを使用することができます - (私は自分自身を書いた私はそれらをテストしていません注意してください):ここでは

はrxjavaとfirebaseためのいくつかのバインディングですあなたの複数のリクエストを受け取り、それらを組み合わせて、最後にそれらに対処してください。

0
私はあなたが参照として確認します(または単にそれを使用)することをお勧め

RxJavaと反応性のモデルを使用して、次のライブラリの1:

RxJava:https://github.com/nmoskalenko/RxFirebase

RxJava 2.0:https://github.com/FrangSierra/Rx2Firebase

ワンそれらはRxJavaで動作し、もう1つはRxJava 2.0の新しいRCで動作します。興味があれば、hereとの違いを見ることができます。

関連する問題