Android 处理FirebaseUI登录和脱机Firestore数据?
我很难弄清楚通过FirebaseUI进行的用户身份验证/登录如何与Android中Firestore数据库的离线数据持久性相关 我知道用户必须登录才能从数据库检索其文档,但当用户脱机时会发生什么情况?在显示用户的文档列表(如果有)之前,如何在我的应用程序中设置用户和数据检查流 如果我对以下文档(和)的理解有误,请更正 因此,我认为用户基本上会看到3个页面:Android 处理FirebaseUI登录和脱机Firestore数据?,android,firebase-authentication,google-cloud-firestore,offline,firebaseui,Android,Firebase Authentication,Google Cloud Firestore,Offline,Firebaseui,我很难弄清楚通过FirebaseUI进行的用户身份验证/登录如何与Android中Firestore数据库的离线数据持久性相关 我知道用户必须登录才能从数据库检索其文档,但当用户脱机时会发生什么情况?在显示用户的文档列表(如果有)之前,如何在我的应用程序中设置用户和数据检查流 如果我对以下文档(和)的理解有误,请更正 因此,我认为用户基本上会看到3个页面: 注册/登录页面 当用户在数据库中没有数据时为空页 他们的文件清单 应为首次用户和注销用户显示第一个注册/登录页面(无论用户自己是否已注销或其
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);
}
}
我知道这违反了评论的规则,但非常感谢你花时间回答我的问题,并提供到你的教程的链接!!我在这里发布我的问题时被卡住了,很紧张,但我想我需要把它放在一个地方,以便像你这样的读者能更清楚地看到我在挣扎什么。干杯