【发布时间】:2018-06-04 19:07:42
【问题描述】:
我有一个 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() 调用,会被视为单个操作?
【问题讨论】:
标签: java android firebase google-cloud-firestore