我的应用程序从Firebase数据库检索数据。在TextView中查看检索到的数据。在检索TextView之前,只显示提示(此处为用户名)。
在Firebase数据库中编写规则时,我都将“ .read”和“ .write”都设置为FALSE。这意味着没有人可以访问数据。
但是然后我的TextView仍然显示提示。如何在应用程序中收到拒绝访问的响应,以便可以创建一个弹出窗口,说明访问被拒绝。
有什么办法得到这种确认吗?
{
"rules": {
".read": false,
".write": false
}
}
所以当我的规则如上所述时 输出为:
但是当我将规则更改为
{
"rules": {
".read": false,
".write": false
}
}
输出为:
因此用户认为他的现金仍在充值,但我想向他显示一个ACCESS DENIED的错误。有办法吗?
我的代码:
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进行了很长的讨论才能解决)。
在这里,您可以找到完整的单一解决方案:
进行以下更改:
字符串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();
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句