У меня есть приложение GPS, в котором я выбираю положение пользователя, а затем извлекаю название города и страны, в котором он находится. Я использовал этот код, чтобы определить его:
public void getLocality() {
geocoder = new Geocoder(context);
try {
List<Address> addressList = geocoder.getFromLocation(lat, lng, 1);
country = addressList.get(0).getCountryName();
locality = addressList.get(0).getLocality();
Log.wtf("Location is ", locality + " in " + country);
} catch (IOException e) {
e.printStackTrace();
}
}
После переменных страна и городЯ хочу установить маркеры на карте Google с помощью этой функции, которая уже работает:
public void getChargersFromDatabase() {
db.collection("chargers")
// .whereEqualTo("country", country)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
MarkerOptions chargers = new MarkerOptions();
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData());
GeoPoint charger = document.getGeoPoint("geopoint");
String name = document.getString("name");
String status = document.getString("status");
double lat = charger.getLatitude();
double lng = charger.getLongitude();
LatLng latLng = new LatLng(lat, lng);
if(status.equals("ready")) {
chargers.icon(BitmapDescriptorFactory.fromResource(R.drawable.thundergreen));
chargers.anchor(0.5f,0.5f);
}
if(status.equals("in use")) {
chargers.icon(BitmapDescriptorFactory.fromResource(R.drawable.thunderred));
chargers.anchor(0.5f,0.5f);
}
chargers.position(latLng);
chargers.title(name);
map.addMarker(chargers);
}
} else {
public void getChargersFromDatabase() {
LatLngBounds curScreen = map.getProjection()
.getVisibleRegion().latLngBounds;
Log.wtf("LATLONG BOUNDS", curScreen.toString());
Log.wtf("getChargers", "Function called");
db.collection("chargers")
.whereEqualTo("country", country)
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
MarkerOptions chargers = new MarkerOptions();
Log.wtf("getChargers", "Task completed");
Log.wtf("getChargers", country);
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData());
GeoPoint charger = document.getGeoPoint("geopoint");
String name = document.getString("name");
String status = document.getString("status");
Log.wtf("status", status);
double lat = charger.getLatitude();
double lng = charger.getLongitude();
LatLng latLng = new LatLng(lat, lng);
if(status.equals("ready")) {
chargers.icon(BitmapDescriptorFactory.fromResource(R.drawable.thundergreen));
chargers.anchor(0.5f,0.5f);
Log.wtf("getChargers", "if it is ready");
}
if(status.equals("in use")) {
chargers.icon(BitmapDescriptorFactory.fromResource(R.drawable.thunderred));
chargers.anchor(0.5f,0.5f);
}
chargers.position(latLng);
chargers.title(name);
map.addMarker(chargers);
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});
}
}
Как я могу убедиться, что после того, как getLocality () завершает работу и заполняет переменные countr и city, функциячтобы установить маркеры должны быть вызваны.