每次更改位置时,我都会负责读取操作吗?

时间:2018-06-04 19:07:43

标签: java android firebase google-cloud-firestore

我有一个Firestore数据库,它包含100个位置,每个位置都正确设置了latlng。我已经创建了一个方法来使用回调实际读取数据库中的数据:

public static void readLocations(MyCallback myCallback) {
    locationsRef.get().addOnCompleteListener(task -> {
        if (task.isSuccessful()) {
            List<LocationModel> locationList = new ArrayList<>();
            for (QueryDocumentSnapshot document : task.getResult()) {
                LocationModel locationModel = document.toObject(LocationModel.class);
                locationList.add(locationModel);
            }
            myCallback.onCallback(locationList);
        }
    });
}

我使用LocationCallback来跟踪当前位置。使用下面的代码,我在LocationCallback中调用readLocations()方法来做一些关于某些距离的数学运算:

LocationCallback locationCallback = new LocationCallback() {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        for (Location myLocation : locationResult.getLocations()) {
            currentLocation = myLocation;
            LatLng currentLatLng = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());

            readLocations(locationList -> {
                for (LocationModel lm : locationList) {
                    Double lat = lm.getLat();
                    Double lng = lm.getLng();
                    Location location = new Location("");
                    location.setLatitude(lat);
                    location.setLongitude(lng);

                    //Calculations
                 }
            });
        }
    }
};

因此,每当当前位置发生变化时,我都会计算当前位置与数据库中位置之间的距离。所以每次更改位置时都调用readLocations()方法,这意味着我每次都在查询数据库?换句话说,每次更改当前位置时,我都会进行100次读取操作?或者因为我已经使用get()来电,会被视为单一操作吗?

1 个答案:

答案 0 :(得分:2)

每次调用get()时,您需要为在服务器上读取的文档数量付费。如果在您的客户端中启用了本地持久性(默认情况下),那么如果服务器上的文档也未更改,则文档可能来自缓存。不收取缓存的文档读取。