Android 当Firebase实时数据库拒绝访问时,如何显示错误?
我的应用程序从我的Firebase数据库检索数据。检索到的数据在文本视图中查看。在检索TextView之前,只显示提示(此处为用户名) 在Firebase数据库中编写规则时,我将“.read”和“.write”都设置为FALSE。这意味着没有人可以访问数据 但是我的文本视图仍然显示提示。如何在应用程序中获得拒绝访问的响应,以便创建一个弹出窗口,说明访问被拒绝 有没有办法得到这样的确认Android 当Firebase实时数据库拒绝访问时,如何显示错误?,android,firebase,firebase-realtime-database,firebase-security,Android,Firebase,Firebase Realtime Database,Firebase Security,我的应用程序从我的Firebase数据库检索数据。检索到的数据在文本视图中查看。在检索TextView之前,只显示提示(此处为用户名) 在Firebase数据库中编写规则时,我将“.read”和“.write”都设置为FALSE。这意味着没有人可以访问数据 但是我的文本视图仍然显示提示。如何在应用程序中获得拒绝访问的响应,以便创建一个弹出窗口,说明访问被拒绝 有没有办法得到这样的确认 { "rules": { ".read": false, ".write": false
{
"rules": {
".read": false,
".write": false
}
}
所以当我的规则如上所述。
输出为:
但是当我把规则改成
{
"rules": {
".read": false,
".write": false
}
}
输出为:
因此,用户认为他的现金仍在加载,但我想向他显示一个拒绝访问的错误。有什么办法吗
我的代码:
String cashOwnValue = "start";
try {
cashOwnValue = dataSnapshot.child("startCash").getValue().toString();
} catch (Throwable e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
cashValue.setText(cashOwnValue);
Toast.makeText(getApplicationContext(), "Your balance has changed.", Toast.LENGTH_SHORT).show();
编辑:
当访问被拒绝时,要让用户知道他的请求已被拒绝,您必须编写以下代码:
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getApplicationContext(), "Access Denied", Toast.LENGTH_LONG).show();
}
为了避免在找不到用户数据时应用程序崩溃,您必须使用try-catch块,如下所示。(这也需要与@PrajwalW进行长时间的讨论才能解决)。这里有一个完整的单一解决方案:
try {
cashOwnValue = "start";
cashOwnValue = dataSnapshot.child("startCash").getValue().toString();
cashValue.setText(cashOwnValue); //add the setText() inside the try block like this...
Toast.makeText(getApplicationContext(), "Your balance has changed.", Toast.LENGTH_SHORT).show();
} catch (Throwable e) {
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_SHORT).show();
}
将您的fb规则逻辑粘贴到此处。此外,只需将写入设置为FALSE,读取设置为True……此外,您还可以执行快速逻辑,如果fb rtdb对象值为null,则显示弹出窗口。请编辑问题以显示所有相关规则,以及执行查询的代码,这些查询的工作方式与您预期的不符。我们应该能够根据您提供的内容复制问题。@PrajwalW我添加了规则和屏幕截图。请参考我的评论,您将获得答案。否。添加setText();在try块中,变量'cashOwnValue'初始值设定项'start'是多余的。。如果我不初始化字符串,它会显示
错误:变量cashOwnValue可能没有初始化
你是说代码顶部的公共字符串??没有工作Edman…你想做什么?试块的作用是什么?一行解释一下!同时粘贴代码而不是图像…字符串初始化为“开始”。从firebase数据库检索数据时。字符串应该包含检索到的数据的值,而不是“开始”。我想将字符串的值从“开始”改为dataRetrieved