Проблема с оператором регистра - PullRequest
1 голос
/ 11 февраля 2020

У меня есть три метода:

  1. Первый проверяет пол пользователя
  2. Второй проверяет тип ассортимента жилья
  3. Третий ставит отсортированных пользователей в адаптер моей карты

Моя проблема связана со вторым методом 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();
                } } }

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Проверьте, какая информация находится в базе данных, у меня были случаи, когда данные не изменялись во время выполнения, и это могло быть причиной того, что они всегда возвращали один и тот же результат. Я знаю, что вы можете использовать режим отладки в большинстве редакторов или вы можете распечатать текущее значение для типа размещения строки.

Редактировать: Внимательно изучив код, который вы используете для базы данных в реальном времени, проверьте, правильно ли обрабатывается отправляемая вами информация.

0 голосов
/ 11 февраля 2020

Вы можете разделить Same Sex на Same SexM и Same SexF и сохранить их отдельно, а затем выбрать соседей по комнате на основе M или F в базе данных. Внутри коммутатора:


if(thisUserSex.equalsIgnoreCase("Male"){
  assortment = "Same SexM";
}else{
  assortment = "Same SexF";
}


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