Таким образом, я некоторое время пытался реализовать способ, которым я могу обновить пользователя, если не найден торговец или если в максимальном радиусе нет торговца. Таким образом, приложение в основном ищет торговца, доступного в Firebase, и сопоставляет его с ближайшим по широте и долготе. Если ничего не найдено в пределах 1 мили, оно увеличивается до 2 и так далее.
То, что я изо всех сил пытался реализовать, это способ сказать, если в пределах базы огня нет торговца, или если в пределах определенного радиуса нет торговца, поэтому, как только он увеличивается, скажем, 10 миль, остановитесь и вернитесь нет торговец найден.
Это код, который у меня сейчас есть, который ищет торговца и увеличивает радиус, но никогда не остановит поиск, пока я не нажму кнопку, которая завершает поиск, поэтому мне нужен способ завершить поиск, не нажимая кнопку кнопка.
private int radius = 1; // 1 radius (mile or km not sure)
private int max_radius = 15;
private Boolean tradesmanFound = false;
private String tradesmanFoundID;
GeoQuery geoQuery;
private void getClosestTradesman() {
DatabaseReference tradesmanLocation = FirebaseDatabase.getInstance().getReference().child("TradesmanAvailable");
GeoFire geoFire = new GeoFire(tradesmanLocation);
geoQuery = geoFire.queryAtLocation(new GeoLocation(customerLocation.latitude, customerLocation.longitude), radius);
geoQuery.removeAllListeners();
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
if (!tradesmanFound && requestBol) {
DatabaseReference customerDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child("Tradesman").child(key);
customerDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists() && dataSnapshot.getChildrenCount() > 0) {
Map<String, Object> tradesmanMap = (Map<String, Object>) dataSnapshot.getValue();
if (tradesmanFound) {
return;
}
if (tradesmanMap.get("Trade").equals(tradeType)) {
tradesmanFound = true;
tradesmanFoundID = dataSnapshot.getKey();
DatabaseReference tradesmanRef = FirebaseDatabase.getInstance().getReference().child("Users").child("Tradesman").child(tradesmanFoundID).child("CustomerRequest");
String customerID = FirebaseAuth.getInstance().getCurrentUser().getUid();
HashMap map = new HashMap();
map.put("CustomerRequestID", customerID);
tradesmanRef.updateChildren(map);
getTradesmanLocation();
getTradesmanInfo();
isRequestFinished();
requestTradesmanBtn.setText("Looking for Tradesman's Location...");
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
@Override
public void onKeyExited(String key) {
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
if (!tradesmanFound) {
radius++;
getClosestTradesman();
}
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});
}
Это беспокоило меня некоторое время, так как мне кажется, что в моей голове что-то довольно простое и прямолинейное, поэтому любая помощь поможет пережить много стресса. Спасибо