Так что я уже давно борюсь с этой проблемой, и это беспокоит меня. Я опубликовал неделю go и получил отличный ответ, который я понял и реализовал. Однако конечная цель только несколько работает. Он удаляет запрос клиента из Firebase, как и должно ... но не меняет ничего на экране, что я хочу. Я думал только о том, что я не размещаю код в правильном месте или что проблема связана с компонентами внешнего интерфейса.
private void getClosestTradesman() {
if (!tradesmanFound && radius >= 10) {
requestBol = false;
tradesmanFound = false;
radius = 1;
String userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("CustomerRequest");
GeoFire geoFire = new GeoFire(ref);
geoFire.removeLocation(userID, new GeoFire.CompletionListener() {
@Override
public void onComplete(String key, DatabaseError error) {
}
});
Intent intent = new Intent(CustomerMapActivity.this, CustomerMapActivity.class);
startActivity(intent);
finish();
return;
}
final DatabaseReference tradesmanLocation = FirebaseDatabase.getInstance().getReference().child("TradesmanAvailable");
final 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) {
geoQuery.removeAllListeners();
radius++;
getClosestTradesman();
}
}
Итак, изначально у меня была первая часть кода в разделе onGeoQueryReady как Итак:
@Override
public void onGeoQueryReady() {
if (!tradesmanFound && radius < 10) {
geoQuery.removeAllListeners();
radius++;
getClosestTradesman();
} else {
endRequest();
endRequest в основном удаляет запрос из firebase и меняет кнопки, такие как: удаление одного, изменение текста на другой и добавление нового.
Так что мне нужна помощь, почему она работает в бэкэнде, но ни один из компонентов интерфейса не меняется. Вот почему мне пришлось добавить вначале, чтобы он перезапустил действие, так как это был единственный способ ... даже тост не появится на экране, поэтому я озадачен тем, что решение.
Спасибо