如果我想要快速更新,Firebase的三个级别嵌套太多了吗?

时间:2015-10-16 06:46:57

标签: java android firebase firebase-realtime-database

The structure

我所做的是查询所有用户的当前位置,以便将其放在地图上。不幸的是,即使我目前只有四个测试用户,也需要花费很多时间(有时长达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个用户。

谢谢!

0 个答案:

没有答案