# #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
After the execution of this function the information is supposed to be displayed, but I cannot understand the for loop issue.