У меня есть три метода:
- Первый проверяет пол пользователя
- Второй проверяет тип ассортимента жилья
- Третий ставит отсортированных пользователей в адаптер моей карты
Моя проблема связана со вторым методом checkHousing()
. Если пользователь выбирает однополый корпус, он проверяет всех остальных мужчин, которые выбрали однополый корпус. Наоборот, для пользователей женского пола. До сих пор Iv смог получить только всех пользователей, которые выбрали Same Sex, как мужчин, так и женщин.
Есть предложения? Я чувствую, что есть более эффективный способ сделать это, но не могу понять это.
Кстати, я использую базу данных Firebase Real Time для хранения информации о пользователе.
private String userSex;
private String thisUserSex;
public void checkUserSex() {
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
DatabaseReference userDb = usersDb.child(user.getUid());
userDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
if (dataSnapshot.child("sex").getValue() != null) {
userSex = dataSnapshot.child("sex").getValue().toString();
switch (userSex) {
case "Male":
thisUserSex = "Male";
break;
case "Female":
thisUserSex = "Female";
break;
}
checkHousing();
} } }
@Override
public void onCancelled(DatabaseError databaseError) {
} }); }
private String housingType;
private String assortment;
public void checkHousing() {
final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
final DatabaseReference userDb = usersDb.child(user.getUid());
userDb.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
if (dataSnapshot.child("Housing").getValue() != null) {
housingType = dataSnapshot.child("Housing").getValue().toString();
switch (housingType) {
case "Same Sex":
assortment = "Same Sex";
break;
case "Uni-Sex":
assortment = "Uni-Sex";
break;
} if (assortment == "Same Sex") dataSnapshot.getValue().toString().equals(thisUserSex);
else { assortment = "UniSex";
}
}
}getRoomMates();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
public void getRoomMates(){
usersDb.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
if (dataSnapshot.child("Housing").getValue() != null) {
if (dataSnapshot.exists() &&
!dataSnapshot.child("connections").child("nope").hasChild(currentUId) &&
!dataSnapshot.child("connections").child("yeps").hasChild(currentUId) &&
dataSnapshot.child("Housing").getValue().toString().equals(assortment)) {
String profileImageUrl = "default";
if (!dataSnapshot.child("profileImageUrl").getValue().equals("default")) {
profileImageUrl =
dataSnapshot.child("profileImageUrl").getValue().toString();
}
cards item = new cards(dataSnapshot.getKey(),
dataSnapshot.child("name").getValue().toString(), profileImageUrl);
rowItems.add(item);
arrayAdapter.notifyDataSetChanged();
} } }