2016-06-14 41 views
2

所以我想創建一個迭代海槽火力結構看這樣的功能:如何迭代Google Android中的Firebase結構?

{ 
    "users" : { 
    "7e122736-2dd4-4770-a360-a0e7cbe41a43" : { 
    "currentLatitude" : 46.6598714, 
    "currentLongitude" : 23.5637339, 
    "displayName" : "gjsj2", 
    "email" : "[email protected]", 
    "password" : "123" 
}, 
"a09e7e1d-ad3a-4d21-b0ba-069e0999bb93" : { 
    "currentLatitude" : 47.6599014, 
    "currentLongitude" : 23.5636797, 
    "displayName" : "gjsj", 
    "email" : "[email protected]", 
    "password" : "123" 
}, 
"abc29286-fd6d-4088-95da-759828b5835d" : { 
    "currentLatitude" : 50.6599043, 
    "currentLongitude" : 23525.5637188, 
    "displayName" : "gjsj3", 
    "email" : "[email protected]", 
    "password" : "123" 
} 
} 
} 

我想創建一個函數,每個獨特的用戶ID的孩子,用他的座標以創建一個標記上一個谷歌地圖地圖。這是我走到這一步,但它不似乎工作:

public void onChildChanged(DataSnapshot snapshot, String s) { 
         for (DataSnapshot userSnapshot : snapshot.getChildren()) { 
          for (DataSnapshot uniqueUserSnapshot : userSnapshot.getChildren()) { 
           Users currentUser = uniqueUserSnapshot.getValue(Users.class); 

           MarkerOptions options = new MarkerOptions() 
             .title(currentUser.getEmail()) 
             .icon(BitmapDescriptorFactory.defaultMarker(getRandomNumberInRange(0, 360))) 
             .position(new LatLng(currentUser.getCurrentLatitude(), currentUser.getCurrentLongitude())); 
           mMap.addMarker(options); 
           Toast.makeText(MainActivity.this, "fsafasfasfas", Toast.LENGTH_SHORT).show(); 
          } 
         } 

       } 

這是我的用戶POJO:

package com.licenta.vladut.mmap; 
public class Users { 
String email; 
String displayName; 
String password; 
double currentLatitude; 
double currentLongitude; 


public Users() { 
} 

public Users(String email, String displayName, String password, double currentLongitude, double currentLatitude) { 
    this.email = email; 
    this.displayName = displayName; 
    this.password = password; 
    this.currentLongitude = currentLongitude; 
    this.currentLatitude = currentLatitude; 
} 
public Users(String email, String displayName, String password) { 
    this.email = email; 
    this.displayName = displayName; 
    this.password = password; 

} 

public String getDisplayName() { 
    return displayName; 
} 

public String getEmail() { 
    return email; 
} 

public String getPassword() { 
    return password; 
} 
public double getCurrentLongitude() { 
    return currentLongitude; 
} 

public double getCurrentLatitude() { 
    return currentLatitude; 
} 

}

很想得到你的想法。謝謝。

+0

「但它似乎沒有工作」 - 你是這個意思嗎? –

+0

那麼它不會爲每個用戶創建一個標記。 –

+0

這可能是一個不同的問題。嘗試在每次迭代時調試'options'對象,並確保問題出現在迭代中,而不是別的。 –

回答

4

如果我理解正確的問題,你實際上接近你想要做的。引用數據庫子用戶,然後添加一個ValueEventListener:

Firebase userRef = new Firebase(/*url*/); 
userRef = userRef.child("users"); 
userRef.addValueEventListener(new ValueEventListener(){ 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot uniqueUserSnapshot : dataSnapshot.getChildren()) { 
      ... 
     } 
    } 

    @Override 
    public void onCancelled(FirebaseError firebaseError) { 

    } 
}); 

ValueEventListener返回調用,而不是孩子們一個個節點。

+0

謝謝,它工作! –