#java #android #firebase #firebase-realtime-database
#java #Android #firebase #firebase-realtime-database
Вопрос:
Я пытаюсь извлечь данные о неровностях из моей базы данных firebase, а затем отобразить неровности с их информацией, которые извлекаются из базы данных.
проблема в том, что моя база данных содержит дочерний дочерний элемент, и это дочернее дочернее имя основано на местоположении, поэтому я не могу получить данные по дочернему дочернему имени.
итак, есть ли способ получить все дочерние имена? итак, я могу получить все данные, r извлекая данные из дочернего элемента?
это моя БД
это мой код для извлечения данных
private void showbumps() {
ref =FirebaseDatabase.getInstance().getReference().child("SpeedBump");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
List<SpeedBump> bumps = new ArrayList<>();
bumps.clear();
// get bumps info from DB
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
SpeedBump bump = postSnapshot.getValue(SpeedBump.class);
bumps.add(bump);
double bump_lat = bump.getLatitude();
double bump_long = bump.getLongitude();
String bump_type = bump.getType();
String bump_size = bump.getSize();
LatLng latLng = new LatLng(bump_lat,bump_long);
String bump_info = " type : " bump_type " size : " bump_size ;
// set height amp; width - apply style
int height = 130;
int width = 130;
Bitmap b = BitmapFactory.decodeResource(getResources(), R.drawable.pin);
Bitmap smallMarker = Bitmap.createScaledBitmap(b, width, height, false);
BitmapDescriptor smallMarkerIcon = BitmapDescriptorFactory.fromBitmap(smallMarker);
// BitmapDescriptor icon = BitmapDescriptorFactory.fromResource(R.drawable.pin);
MarkerOptions marker = new MarkerOptions().position(latLng).title("Bump info").snippet(bump_info).icon(smallMarkerIcon);
// create marker for bumps
mMap.addMarker(marker);
} }
код не показывает никаких изменений.
Комментарии:
1. Как
ref
инициализируется?2. ref = FirebaseDatabase.getInstance().getReference().child(«SpeedBump»);
Ответ №1:
Вы почти на месте. Вам просто нужен дополнительный цикл, чтобы учесть дополнительный уровень неизвестных ключей в вашем JSON:
private void showbumps() {
ref =FirebaseDatabase.getInstance().getReference().child("SpeedBump");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
List<SpeedBump> bumps = new ArrayList<>();
bumps.clear();
for (DataSnapshot locationSnapshot: snapshot.getChildren()) {
for (DataSnapshot bumpSnapshot: locationSnapshot.getChildren()) {
SpeedBump bump = bumpSnapshot.getValue(SpeedBump.class);
...
Я считаю наиболее полезным давать переменным моментального снимка четкие имена, указывающие, какую часть данных они захватывают.