【问题标题】:Whether the permission value is allowed or not in the firebase database, app takes always to the same layout无论firebase数据库中是否允许权限值,应用程序始终采用相同的布局
【发布时间】:2018-06-22 13:01:09
【问题描述】:

好的,我想这里有一些更新可以更好地解释问题:

我正在尝试使用 firebase 数据库执行以下任务:

  1. 如果验证了用户的email地址,检查firebase数据库https://example.firebaseio.com/Users/Permission中的Permission值是否为allow
  2. 如果Permission: "allow",则使profileAllow 布局可见。否则,使 profileVarified 布局可见。
  3. 如果未验证电子邮件,则使 profileNotVarified 布局可见。

我的问题是如果用户的电子邮件没有经过验证,它会使profileNotVarified 布局完美可见,但是当验证电子邮件时,逻辑不起作用。无论Permission 值是allow 还是其他,它都不会使任何布局可见。我的猜测是它没有从数据库中获得任何价值。 (我已尝试使所有布局可见或转到另一个活动以获取已验证的电子邮件,但它没有做任何事情。它只是显示一个空白布局。

这是我的活动,我猜问题出在:

private void loadUserInformation() {
    final FirebaseUser user = mAuth.getCurrentUser();
    if (user.isEmailVerified()) {
        Firebase AllUserPermission = new Firebase("https://example.firebaseio.com/Users/Permission");
        AllUserPermission.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String myStrign = dataSnapshot.getValue(String.class);

                if (myStrign.equals("allow")) {
                    profileAllow.setVisibility(View.VISIBLE);
                    profileVarified.setVisibility(View.GONE);
                    profileNotVarified.setVisibility(View.GONE);
                } else {
                    profileAllow.setVisibility(View.GONE);
                    profileVarified.setVisibility(View.VISIBLE);
                    profileNotVarified.setVisibility(View.GONE);
                }
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {}
        });
    } else {
        profileAllow.setVisibility(View.GONE);
        profileVarified.setVisibility(View.GONE);
        profileNotVarified.setVisibility(View.VISIBLE);
    }
}

作为参考,我也附上xml和数据库结构。

这是我的activity_profile.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.ProfileActivity">

    <RelativeLayout
        android:id="@+id/profileNotVarified"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone">
        <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_below="@+id/imageView"
            android:layout_marginStart="59dp"
            android:layout_marginTop="48dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Not varified" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/profileVarified"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone">
        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/imageView2"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="15dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Varified" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/profileAllow"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone">
        <EditText
            android:id="@+id/editText3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/imageView2"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="15dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="Allowed" />
    </RelativeLayout>

</RelativeLayout>

这是我的数据库结构:

【问题讨论】:

标签: android firebase firebase-realtime-database


【解决方案1】:
AllUserPermission.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String myStrign = dataSnapshot.getValue(String.class);
            if (myStrign.equals("allow")) {
                profileVarified.setVisibility(View.VISIBLE);
                profileNotVarified.setVisibility(View.GONE);
            } 
            else {
                profileNotVarified.setVisibility(View.VISIBLE);
                profileVarified.setVisibility(View.GONE);
            }
       }

       @Override
       public void onCancelled(FirebaseError firebaseError) {

       }
});

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    要解决这个问题,请使用以下代码行:

    if (user.isEmailVerified() && myStrign.equals("allow")) {
        profileVarified.setVisibility(View.VISIBLE);
        profileNotVarified.setVisibility(View.GONE);
    } else {
        profileNotVarified.setVisibility(View.VISIBLE);
        profileVarified.setVisibility(View.GONE);
    }
    

    编辑:

    private void loadUserInformation() {
        final FirebaseUser user = mAuth.getCurrentUser();
    
        Firebase AllUserPermission = new Firebase("https://smartpedi-rimikri.firebaseio.com").child("Users").child("Permission");
        AllUserPermission.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                String myStrign = dataSnapshot.getValue(String.class);
    
                if (user.isEmailVerified() && myStrign.equals("allow")) {
                    profileVarified.setVisibility(View.VISIBLE);
                    profileNotVarified.setVisibility(View.GONE);
                } else {
                    profileNotVarified.setVisibility(View.VISIBLE);
                    profileVarified.setVisibility(View.GONE);
                }
            }
    
            @Override
            public void onCancelled(FirebaseError firebaseError) {}
        });
    }
    

    【讨论】:

    • 感谢您的建议,但即使更改了代码并更改了数据库中的 Permission 值,应用程序仍然显示profileVarified 布局。
    • 还将addValueEventListener 更改为addListenerForSingleValueEvent 并从if 语句的开头注释else 部分和profileNotVarified.setVisibility(View.GONE);。您只能在 onDataChange() 方法中使用 if 语句。
    • 它仍然返回相同的结果。你介意更新答案吗,也许我做错了。
    • 您确定profileVarifiedprofileNotVarified 不同吗?
    • 是的,他们是。如果未验证电子邮件,则完美显示profileNotVarified 布局。
    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 2021-05-27
    • 1970-01-01
    • 2013-08-07
    • 2014-03-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多