Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 处理FirebaseUI登录和脱机Firestore数据?_Android_Firebase Authentication_Google Cloud Firestore_Offline_Firebaseui - Fatal编程技术网

Android 处理FirebaseUI登录和脱机Firestore数据?

Android 处理FirebaseUI登录和脱机Firestore数据?,android,firebase-authentication,google-cloud-firestore,offline,firebaseui,Android,Firebase Authentication,Google Cloud Firestore,Offline,Firebaseui,我很难弄清楚通过FirebaseUI进行的用户身份验证/登录如何与Android中Firestore数据库的离线数据持久性相关 我知道用户必须登录才能从数据库检索其文档,但当用户脱机时会发生什么情况?在显示用户的文档列表(如果有)之前,如何在我的应用程序中设置用户和数据检查流 如果我对以下文档(和)的理解有误,请更正 因此,我认为用户基本上会看到3个页面: 注册/登录页面 当用户在数据库中没有数据时为空页 他们的文件清单 应为首次用户和注销用户显示第一个注册/登录页面(无论用户自己是否已注销或其

我很难弄清楚通过FirebaseUI进行的用户身份验证/登录如何与Android中Firestore数据库的离线数据持久性相关

我知道用户必须登录才能从数据库检索其文档,但当用户脱机时会发生什么情况?在显示用户的文档列表(如果有)之前,如何在我的应用程序中设置用户和数据检查流

如果我对以下文档(和)的理解有误,请更正

因此,我认为用户基本上会看到3个页面:

  • 注册/登录页面
  • 当用户在数据库中没有数据时为空页
  • 他们的文件清单
  • 应为首次用户和注销用户显示第一个注册/登录页面(无论用户自己是否已注销或其登录令牌是否已过期)。这就是FirebaseUI进行救援的地方。我可以只使用
    getCurrentUser
    方法检查这两种情况吗?当用户脱机时,此方法返回什么?我是否在有关的文档中遗漏了这一点

    对于数据库中没有任何数据的已登录用户(无论是因为他们刚刚首次登录还是删除了所有数据),应显示第二个空页面。我是否使用
    get
    调用检查数据?当没有数据时它返回什么,或者我必须使用什么侦听器?我是否在有关的文档中遗漏了这一点

    第三个列表页应显示给拥有现有数据或刚刚创建数据/文档的已登录用户。这可以通过对集合的
    get
    调用对集合进行查询来获得

    最后,您是否可以按照以下方式将所有这些从一个活动/片段中绑定在一起,并按
    onCreate
    /
    onCreateView
    的顺序排列

    首次-检查首次登录和注销用户:如果是,则显示(充气)第一页(即启动FirebaseUI登录意图活动)。用户注册/登录后会发生什么?用户是否返回到原始活动/片段?我该怎么处理

    第二-检查数据库中的数据:如果没有数据,则显示“空”页面。如果有数据,则显示文档列表。这似乎可以通过在文本为“空”的
    TextView
    和同一布局中的
    RecyclerView
    之间切换可见性来解决(参见SO post)

    请帮忙

    我可以只使用getCurrentUser方法检查这两种情况吗?当用户脱机时,此方法返回什么

    FirebaseAuth
    对象上调用
    getCurrentUser()
    方法时,如果身份验证过程成功,它将返回类型为的对象

    FirebaseUser firebaseUser = firebaseAuth.getCurrentUser();
    
    但在此之前,您需要通过如下方式调用静态方法来实例化
    firebaseAuth
    对象:

    FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
    
    @Override
    public void onDataChanged() {
        if (getItemCount() == 0) {
            recyclerView.setVisibility(View.GONE);
            emptyView.setVisibility(View.VISIBLE);
        } else {
            recyclerView.setVisibility(View.VISIBLE);
            emptyView.setVisibility(View.GONE);
        }
    }
    
    因此,如果身份验证过程成功并且您正在脱机,那么调用
    getCurrentUser()
    将始终返回
    FirebaseUser
    对象并不重要

    我是否使用get呼叫检查数据

    是的,您应该使用
    get()
    调用,第一次检查
    if(task.issusccessful())
    ,第二次检查数据是否存在于特定位置

    当没有数据时它返回什么,或者我必须使用什么侦听器

    它将返回一个空的
    DocumentSnapshot
    对象。因此,首先需要使用
    get()
    addOnCompleteListener()

    这可以通过对集合的get调用对集合进行查询来获得

    是的,没错

    最后,您是否会在onCreate/onCreateView中以以下方式和顺序将所有这些从一个活动/片段中绑定在一起

    是的,您可以从一个活动/片段中将所有这些联系在一起

    用户注册/登录后会发生什么?用户是否返回到原始活动/片段?我该怎么处理

    如果用户注销,您应该将用户重定向到
    登录活动
    。我已经在我的中一步一步地解释了使用的整个身份验证过程

    检查数据库中的数据:如果没有数据,则显示“空”页面

    是一种推荐的方法,您可以使用
    FirestoreRecyclerAdapter
    从云Firestore数据库检索数据并将其显示在
    RecyclerView
    中。因此,在这种情况下,您可以覆盖
    onDataChanged()
    ,如下所示:

    FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
    
    @Override
    public void onDataChanged() {
        if (getItemCount() == 0) {
            recyclerView.setVisibility(View.GONE);
            emptyView.setVisibility(View.VISIBLE);
        } else {
            recyclerView.setVisibility(View.VISIBLE);
            emptyView.setVisibility(View.GONE);
        }
    }
    

    我知道这违反了评论的规则,但非常感谢你花时间回答我的问题,并提供到你的教程的链接!!我在这里发布我的问题时被卡住了,很紧张,但我想我需要把它放在一个地方,以便像你这样的读者能更清楚地看到我在挣扎什么。干杯