Мое приложение использует Firebase. Я использовал ChildEventListener для получения данных.Установить правило в Firebase, чтобы получить данные примерно за период
mTaixeReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
String strTen = dataSnapshot.child("ten").getValue(String.class);
String strSdt = dataSnapshot.child("sdt").getValue(String.class);
String strLong = dataSnapshot.child("longtitude").getValue(String.class);
String strLat = dataSnapshot.child("latitude").getValue(String.class);
String strDiemden = dataSnapshot.child("diemden").getValue(String.class);
String strThoigian=dataSnapshot.child("thoigian").getValue(String.class);
//Toast.makeText(MapsActivity.this,"Toa do: "+strLat+","+strLong,Toast.LENGTH_LONG).show();
double dblLong = Double.parseDouble(strLong);
double dblLat = Double.parseDouble(strLat);
//Marker marker=mMap.addMarker(new MarkerOptions().position(new LatLng(dblLat,dblLong)).title(strTen));
marker = mMap.addMarker(new MarkerOptions().position(new LatLng(dblLat, dblLong)).
icon(BitmapDescriptorFactory.fromBitmap(iconFactory.makeIcon(strDiemden)))
.title(strTen+"\n"+strThoigian).snippet("Sđt: "+strSdt+"\n Loại xe: "+strLoaixe+"\n Giá: "+strGia));
Markers.put(dataSnapshot.getKey(), marker);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
/* if (Markers.containsKey(dataSnapshot.getKey())) {
String strLong = dataSnapshot.child("longtitude").getValue(String.class);
String strLat = dataSnapshot.child("latitude").getValue(String.class);
Marker marker = Markers.get(dataSnapshot.getKey());
marker.setPosition(new LatLng(Double.parseDouble(strLat),
Double.parseDouble(strLong)));
}*/
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
/* if (Markers.containsKey(dataSnapshot.getKey())) {
Marker marker = Markers.get(dataSnapshot.getKey());
marker.remove();
}*/
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
}
);
Он работал хорошо, когда я установил правило, как этот
{
"rules": {
"Taixe":{
".read": true,
".write": true
}
}
}
потому что я просто хочу, чтобы получить данные о 10 минут, так что я изменил:
{
"rules": {
"Taixe":{
"$Taixe":{
".read": "data.child('timestamp').val() > (now - 600000)",
".write": true
}
}
}
}
и я могу не получать данные. Как получить данные ChildEvenListener в этом случае?
Это мои данные:
Добро пожаловать. Если бы мой ответ был полезен, нажмите кнопку вверху слева от него. Если он ответил на ваш вопрос, нажмите галочку, чтобы принять его. Таким образом, другие знают, что вам (в достаточной мере) помогли. –
Я читал и пытался менять правила много раз, но я до сих пор не могу получить нужные мне данные. Можете ли вы помочь мне исправить мои правила. –
Как я ответил: если вы присоедините слушателя к '/ Taixe', вам нужно будет иметь разрешение на чтение на этом узле. Поэтому ваши правила должны содержать: '{" rules ": {" Taixe ": {" .read ": true}}}'. И это также означает, что вы не можете иметь правило ниже в дереве, которое автоматически скрывает узлы после X-времени, поскольку [правила не являются фильтрами] (http://stackoverflow.com/search?q=%5Bfirebase%5D+rules+ являются + не + фильтры). Кажется, что вы пытаетесь объединить две функции («скрыть после X времени» и «перечислить всех детей»), которые не могут быть объединены в один список. –