2016-08-25 3 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, 예, 업데이트 –

+0

@KgaboL, json이 필요한 이유는 무엇입니까? –

답변

1

한번에 이동 get_all_user (database.getReference()); 메소드 내부의 onDataChange 메소드 fast_get_innfouser 메소드

2

RXjava의 유용한 유스 케이스처럼 들립니다. 여기

는 rxjava 및 중포 기지에 대한 몇 가지 바인딩은 다음과 같습니다 (내가 그들을 테스트하지 않았습니다 주 - 난 내 자신을 썼다)

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

그런 다음 당신이 zip/concat을 사용할 수 있습니다 여러 요청을 취한 다음 결합하여 끝에 행동하십시오.

0

난 당신이 참조로 확인하는 것이 좋습니다 (또는 사용) RxJava와 반응성 모델을 사용하여 다음 라이브러리 중 하나를

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

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

하나 그들은 RxJava와 함께 작동하고 다른 하나는 RxJava 2.0의 새로운 RC로 작동합니다. 관심이 있다면 here의 차이점을 볼 수 있습니다.

관련 문제