база данных firebase android studio: как получить данные от дочернего элемента

#java #android #firebase #firebase-realtime-database

#java #Android #firebase #firebase-realtime-database

Вопрос:

Я пытаюсь извлечь данные о неровностях из моей базы данных firebase, а затем отобразить неровности с их информацией, которые извлекаются из базы данных.

проблема в том, что моя база данных содержит дочерний дочерний элемент, и это дочернее дочернее имя основано на местоположении, поэтому я не могу получить данные по дочернему дочернему имени.

итак, есть ли способ получить все дочерние имена? итак, я могу получить все данные, r извлекая данные из дочернего элемента?

это моя БД

db

это мой код для извлечения данных

      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);
                    ...
  

Я считаю наиболее полезным давать переменным моментального снимка четкие имена, указывающие, какую часть данных они захватывают.