Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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 当Firebase实时数据库拒绝访问时,如何显示错误?_Android_Firebase_Firebase Realtime Database_Firebase Security - Fatal编程技术网

Android 当Firebase实时数据库拒绝访问时,如何显示错误?

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

我的应用程序从我的Firebase数据库检索数据。检索到的数据在文本视图中查看。在检索TextView之前,只显示提示(此处为用户名)

在Firebase数据库中编写规则时,我将“.read”和“.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-catch块执行
  • 在try块中编写代码,在catch块中处理异常
  • 根据您的条件,您希望在用户尝试编辑字段时显示错误或默认文本。为此,在catch块中编写代码
  • 现在,您的新错误消息文本未更新:
  • 进行以下更改:

    字符串cashOwnValue=null//全局设置为空初始值

            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