我有一个Firestore数据库,它包含100个位置,每个位置都正确设置了lat
和lng
。我已经创建了一个方法来使用回调实际读取数据库中的数据:
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()
来电,会被视为单一操作吗?
答案 0 :(得分:2)
每次调用get()时,您需要为在服务器上读取的文档数量付费。如果在您的客户端中启用了本地持久性(默认情况下),那么如果服务器上的文档也未更改,则文档可能来自缓存。不收取缓存的文档读取。