带有开关案例声明的问题

问题描述 投票:1回答:2

我有三种方法:

  1. 首先检查用户的性别
  2. 第二个检查住房分类类型
  3. 第三个将分类的用户放入我的卡适配器中

我的问题是第二种方法checkHousing()。如果用户选择“同性”住房,则它会根据用户的性别检查数据库中所有选择“同性”住房的用户,而不仅仅是“男性”或“女性”。

有什么建议吗?我觉得有一种更有效的方法可以执行此操作,但似乎无法解决。

顺便说一下,我正在使用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();
                } } }
java android firebase-realtime-database
2个回答
0
投票

您可以将Same Sex分为Same SexMSame SexF并存储这些分隔符,然后根据数据库中的MF选择室友。开关内部:


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



0
投票

检查数据库中包含哪些信息,我发现实例在运行时没有更改数据,这可能是导致数据始终返回相同结果的原因。我知道您可以在大多数编辑器中使用调试模式,也可以打印出字符串外壳类型的当前值。

编辑:仔细查看您正在使用的实时数据库的代码,因此请检查您提交的信息是否得到正确处理。

© www.soinside.com 2019 - 2024. All rights reserved.