我所做的是查询所有用户的当前位置,以便将其放在地图上。不幸的是,即使我目前只有四个测试用户,也需要花费很多时间(有时长达10秒)才能返回结果。这真的是一个需要展平的结构吗?
这是我用来获取每个用户的CurrentLocation实例的Java代码:
public void showLooksieUsersOnMap() {
final Firebase myFirebase = new Firebase(Constants.FIREBASE_URL);
Query query = myFirebase.child("users").orderByKey();
query.addChildEventListener(new ChildEventListener() {
@Override
public void onChildRemoved(DataSnapshot arg0) {
}
@Override
public void onChildMoved(DataSnapshot arg0, String arg1) {
}
@Override
public void onChildChanged(DataSnapshot arg0, String arg1) {
}
@Override
public void onChildAdded(DataSnapshot arg0, String arg1) {
String userId = arg0.getKey();
Query query2 = myFirebase.child("users").child(userId)
.child("currentLocation");
query2.keepSynced(true);
query2.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot arg0) {
String content = arg0.getKey();
Log.e("content ", content);
CurrentLocation currentLoc = arg0
.getValue(CurrentLocation.class);
Log.e("content loc ", currentLoc.toString());
userLocations.add(currentLoc);
LatLng latLng = new LatLng(currentLoc.getLat(),
currentLoc.getLon());
Marker marker = mMap.addMarker(new MarkerOptions()
.position(latLng)
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.ic_launcher_map))
.title("Hey there!"));
}
@Override
public void onCancelled(FirebaseError arg0) {
}
});
}
@Override
public void onCancelled(FirebaseError arg0) {
// TODO Auto-generated method stub
}
});
}
我试图通过使用query.keepSynced()和启用数据持久性(并且它确实有效)使应用程序看起来更快但我已经被认为这是一种解决方法,在这种情况下它&# 39;更好地压平数据。事实是,我不认为它会如此嵌套,以至于它会使操作执行的时间超过2秒,特别是只有4个用户。
谢谢!