snapshot.getChildren() не передает значения переменной привязки в ЦИКЛЕ onDataChange

# #java #android #firebase #for-loop #firebase-realtime-database

Вопрос:

У меня возникли проблемы при настройке данных из базы данных Firebase в метод drivergeomodel.setDriverInfo() в onDataChange. Я использовал цикл For, чтобы получить данные в базе данных, а затем передать значения в «привязку DataSnapshot». При отладке он показывает значения только в snapshot.getChildren() и не передает значения в переменную «привязка».

Ниже приведен код функции и цикла for

   private void FindDriverByKey(DriverGeoModel driverGeoModel) {

        FirebaseDatabase.getInstance().getReference(Common.DRIVER_INFO_REFERENCE).child(driverGeoModel.getKey())
                .addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {

                            for (DataSnapshot snap  : snapshot.getChildren()){
                                //Without loop the app crashes
                                // debugger cannot resolve snap variable.
                                if (snap.hasChildren()) {
                                    driverGeoModel.setDriverInfoModel(snap.getValue(DriverInfoModel.class));

                                    Common.DriversFound.get(driverGeoModel.getKey()).setDriverInfoModel(snap.getValue(DriverInfoModel.class));

                                    iFirebaseDriverInfoListener.onDriverInfoLoadSuccess(driverGeoModel);
                                }
                               // else {
                                   // iFirebaseFailedListener.OnFirebaseLoadFailed(getString(R.string.key_not_found)   "n"   driverGeoModel.getKey());}
                                }

                            }



                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {

                        iFirebaseFailedListener.OnFirebaseLoadFailed(error.getMessage());
                    }
                });
    }

 

Если цикл удален и передан только снимок, приложение выйдет из строя. Ниже приведены классы, которые я использовал

Модель DriverInfo

 public class DriverInfoModel {
    private String firstName,lastName,phoneNumber,avatar;
    private double rating;


    public DriverInfoModel() {
    }

    public DriverInfoModel(String firstName, String lastName, String phoneNumber) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.phoneNumber = phoneNumber;
      //  this.avatar=avatar;

    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }
 

DriverGeoModel class

 public class DriverGeoModel {
    private String key;
    private GeoLocation geoLocation;
    private DriverInfoModel driverInfoModel;
    private boolean isDecline;



    public DriverGeoModel() {
    }

    public  DriverInfoModel getDriverInfoModel() {
        return driverInfoModel;
    }

    public void setDriverInfoModel(DriverInfoModel driverInfoModel) {
        this.driverInfoModel = driverInfoModel;
    }

    public DriverGeoModel(String key, GeoLocation geoLocation) {
        this.key = key;
        this.geoLocation = geoLocation;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public GeoLocation getGeoLocation() {
        return geoLocation;
    }

    public void setGeoLocation(GeoLocation geoLocation) {
        this.geoLocation = geoLocation;
    }
 

Following is the firebase database reference i am accessing

    public static final String DRIVER_INFO_REFERENCE = "DriverInfo" ;
 

And the Firebase Database

   "DriverInfo" : {
    "EQMRIr6hhlNyYcldadTnNVXargK2" : {
      "avatar" : "https://firebasestorage.googleapis.com/v0/b/iblood-test-2d554.appspot.com/o/avatars/EQMRIr6hhlNyYcldadTnNVXargK2?alt=mediaamp;token=e8751502-94d4-4b7a-8488-2fe1bb78818b",
      "firstName" : "Mahek",
      "lastName" : "AA"
      "phoneNumber" : "",
      "rating" : 0
    }
 

Attached snap is the debugging details of the function

Debugging Details

After the execution of this function the information is supposed to be displayed, but I cannot understand the for loop issue.