Идея в следующем: есть узел locations/ns/we и есть узел users/location/ который содержит ключи ns и we. При нажатии на кнопку, координаты и на 1 и на 2 узле изменяются, то есть было:
стало:
Мне нужно получить все узлы которые хранится на текущей координате, то есть locations/currentNS/currentWE.
Я ставлю слушателя на значения users/UID/location/ns users/UID/location/we, получаю текущие координаты и в этом же слушателе ставлю слушателя на узел locations/currentNS/currentWE. Проблема в том, что если побегать шаг вперед-назад, то методы onChildAdded, onChildRemoved и пр, запускаются по несколько раз. Если я 5 раз стану на 10 1, то на 5 шаге, методы запустятся по 5 раз каждый, хотя на данной ссылке всего 1 узел. Такое впечатление, что слушатели накапливаются по кол-ву шагов. Что я делаю не так?
Срабатывает при движении на север
public void onNorth(View view) {
Map<String, Object> update = new HashMap<>();
update.put("locations/"+ns+"/"+we+"/"+userId, null);
++ns;
update.put("users/" + userId + "/location/ns", ns);
update.put("locations/"+ns+"/"+we+"/"+userId, new User("Bot"));
mFirebaseDatabase.getReference().updateChildren(update);
}
Слушатель по значению, получает текущие координаты и запускает слушателя setListenerForCurrentLocation
mFirebaseDatabase = FirebaseDatabase.getInstance();
mReferenceLocation = mFirebaseDatabase.getReference("users/" + userId + "/location");
if (mValueEventListener == null) {
mValueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Location location = dataSnapshot.getValue(Location.class);
ns = location.getNs();
we = location.getWe();
//Listener on current position(locations)
setListenerForCurrentLocation(ns,we);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mReferenceLocation.addValueEventListener(mValueEventListener);}
mReferenceLocations = mFirebaseDatabase.getReference("locations/" + ns+"/"+we);
Метод setListenerForCurrentLocation, запускает слушатель на текущей координате :
public void setListenerForCurrentLocation(long ns, long we){
mChildEventListenerLocations = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
Log.e("onChildAdded", dataSnapshot.getKey());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s){
Log.e("onChildChanged", dataSnapshot.getKey());
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
Log.e("onChildRemoved", dataSnapshot.getKey());
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
Log.e("onChildMoved", dataSnapshot.getKey());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mReferenceLocations.addChildEventListener(mChildEventListenerLocations);
}
Пользователь должен ввести текст на языке BBCodeЭтот текст отправляется на сервер и возвращается на страницу в виде HTML
При попытке маршалинга бинарных данных в структуру происходит инверсия байтов внутри полей структуры те
Собственно есть файл с уникальными строками, их допустим 6кк, и есть вторая 2кк, нужно проверить базу 2кк на наличие в базе 6кк, и выдать только...