Проект, над которым я работаю, имеет 3 «таблицы» в базе данных реального времени firebase, а именно:
Users (содержит регистрационную информацию пользователей, например, электронную почту, пароли, номера мобильных телефонов и т. Д.)
VictimProfiles(Содержит базовую информацию о профиле, такую как строка профиля профиля, имя, должность и соответствующий идентификатор пользователя из таблицы «Пользователи»)
VolunteerProfiles (содержит адрес, широту, долготу, время доступности и соответствующие идентификаторы UserID и VictimProfileID (сгенерированные).от Firebase))
в своей деятельности на Google Картах я должен добавить маркеры на местоположение каждого добровольца, а также пользователя, который в данный момент использует приложение, с настраиваемым информационным окном, отображающим необходимую информацию оДобровольцы, однако, как показано в коде ниже, когда я пытаюсь получить доступ к таблице VictimProfile и Users из ValueEventListener таблицы добровольцев, их данные не записываются в общедоступные строки, в которые я их пишу.Я знаю, это звучит запутанно, но взгляните на код, и вы поймете, что я имею в виду
public void DropVolunteerMarkers()
{
//DROP ALL MARKERS FUNCTION
volunteerDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot volunteerprofile:dataSnapshot.getChildren())
{
key=(String) volunteerprofile.child("UserID").getValue();
victimID=(String) volunteerprofile.child("VictimProfileID").getValue();
getVictimInfo();//GET NAME,PIC,JOB TITLE FROM THE VICTIM TABLE FOR THIS SPECIFIC VOLUNTEER
getUserInfo();//GET EMAIL AND PHONE NUMBER FROM USERS TABLE FOR THIS SPECIFIC VOLUNTEER
String currentuserid=SaveSharedPreference.getUserName(FindNearbyVolunteers.this);
if(!key.equals(currentuserid))//TO AVOID CURRENT USER BEING SHOWN AS A VOLUNTEER
{
address= (String)volunteerprofile.child("Address").getValue();
availabiliity=(String)volunteerprofile.child("Availability").getValue();
String LAT= (String) volunteerprofile.child("Latitude").getValue();
String LNG= (String) volunteerprofile.child("Longitude").getValue();
Toast.makeText(FindNearbyVolunteers.this,LAT+", "+LNG,Toast.LENGTH_SHORT).show();
Double Lat= Double.parseDouble(LAT);
Double Long= Double.parseDouble(LNG);
LatLng latLng = new LatLng(Lat,Long);
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
Toast.makeText(FindNearbyVolunteers.this,key+", "+victimID+", "+name+", "+jobtitle+", "+availabiliity+", "+email+", "+address,Toast.LENGTH_LONG).show();
//mMap.setInfoWindowAdapter(new VolunteerPopupAdapter(FindNearbyVolunteers.this,name,jobtitle,availabiliity,email,address,dp,number));
markerOptions.title(volunteerprofile.getKey().toString());
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
mCurrLocationMarker = mMap.addMarker(markerOptions);
}
else{
//IN CASE OF CURRENT USER
//Place current location marker
LatLng latLng = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
markerOptions.title("YOU");
markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
mCurrLocationMarker = mMap.addMarker(markerOptions);
}}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
метод getVictimInfo ():
private void getVictimInfo()
{
victimDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot victimProfile:dataSnapshot.getChildren())
{
if(victimProfile.getKey().equals(victimID))
{
dp=(String)victimProfile.child("DP").getValue();
jobtitle=(String)victimProfile.child("JobTitle").getValue();
name=(String)victimProfile.child("Name").getValue();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
метод getUserInfo ()
private void getUserInfo(){
userDatabaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot userProfile:dataSnapshot.getChildren())
{
if(userProfile.getKey().equals(key))
{
email=(String)userProfile.child("Email").getValue();
number=(String)userProfile.child("Mobile").getValue();;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
строка, в которой я должен сохранить значения
DatabaseReference volunteerDatabaseReference,userDatabaseReference,victimDatabaseReference;
String dp,jobtitle="no value",name="no value";
String email="no value",number="no value",address="no value",availabiliity="no value",victimID,key;
мой снимок экрана базы данных введите описание изображения здесь