Android Firebase聊天应用程序setValue失败公共数据库出错?

Android Firebase聊天应用程序setValue失败公共数据库出错?,android,firebase,firebase-realtime-database,firebase-security,Android,Firebase,Firebase Realtime Database,Firebase Security,我有一个使用Firebase的聊天应用程序,它一直有一个 x处的setValue失败:数据库错误:权限被拒绝 每次键入消息时出错 我已将数据库设置为公共数据库: service cloud.firestore { match /databases/{database}/documents { match /{allPaths=**} { allow read, write: if request.auth.uid != null; } } } 这是我聊天记录

我有一个使用Firebase的聊天应用程序,它一直有一个

x处的setValue失败:数据库错误:权限被拒绝

每次键入消息时出错

我已将数据库设置为公共数据库:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{allPaths=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}
这是我聊天记录中的内容吗

private void displayChat() {

    ListView listOfMessage = findViewById(R.id.list_of_message);

    Query query = FirebaseDatabase.getInstance().getReference();
    FirebaseListOptions<Chat> options = new FirebaseListOptions.Builder<Chat>()
            .setLayout(R.layout.list_item)
            .setQuery(query, Chat.class)
            .build();

    adapter = new FirebaseListAdapter<Chat>(options) {
        @Override
        protected void populateView(View v, Chat model, int position) {
            //Get reference to the views of list_item.xml
            TextView messageText, messageUser, messageTime;
            messageText = v.findViewById(R.id.message_text);
            messageUser = v.findViewById(R.id.message_user);
            messageTime = v.findViewById(R.id.message_time);

            messageText.setText(model.getMessageText());
            messageUser.setText(model.getMessageUser());
            messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", model.getMessageTime()));
        }
    };
    listOfMessage.setAdapter(adapter);
}
private void displayChat(){
ListView listOfMessage=findViewById(R.id.list\u of_消息);
Query Query=FirebaseDatabase.getInstance().getReference();
FirebaseListOptions=new FirebaseListOptions.Builder()
.setLayout(R.layout.list_项)
.setQuery(查询,Chat.class)
.build();
适配器=新FirebaseListAdapter(选项){
@凌驾
受保护的void populateView(视图v、聊天模型、int位置){
//获取对list_item.xml视图的引用
text查看messageText,messageUser,messageTime;
messageText=v.findviewbyd(R.id.message\u text);
messageUser=v.findviewbyd(R.id.message\u user);
messageTime=v.findviewbyd(R.id.message\u time);
messageText.setText(model.getMessageText());
messageUser.setText(model.getMessageUser());
setText(DateFormat.format(“dd-MM-yyyy(HH:MM:ss)”,model.getMessageTime());
}
};
setAdapter(适配器);
}
更改此选项

request.auth.uid!=空

或者在开始对话之前定义一个正确的身份验证机制,其中用户由userID定义

request.auth.uid!=空


或者在开始对话之前定义适当的身份验证机制,其中用户由userID定义您的代码正在使用Firebase实时数据库,但您正在更改Cloud Firestore的安全规则。虽然这两个数据库都是Firebase的一部分,但它们完全不同,其中一个数据库的服务器端安全规则不适用于另一个数据库

当您进入Firebase控制台中的“数据库”面板时,很可能会出现以下情况:

如果您在,您可以通过单击顶部的Cloud Firestore BETA,然后从列表中选择Realtime Database来更改实时数据库规则

也可以通过单击直接转到实时数据库的安全规则

与您拥有的内容相匹配的实时数据库的安全规则是:

{
  "rules": {
    ".read": "auth.uid !== null",
    ".write": "auth.uid !== null"
  }
}

这将授予任何经过身份验证的用户对整个数据库的完全读写访问权限。阅读我对这个问题的回答,了解更多关于此类规则的安全/风险权衡:。

您的代码正在使用Firebase实时数据库,但您正在更改云Firestore的安全规则。虽然这两个数据库都是Firebase的一部分,但它们完全不同,其中一个数据库的服务器端安全规则不适用于另一个数据库

当您进入Firebase控制台中的“数据库”面板时,很可能会出现以下情况:

如果您在,您可以通过单击顶部的Cloud Firestore BETA,然后从列表中选择Realtime Database来更改实时数据库规则

也可以通过单击直接转到实时数据库的安全规则

与您拥有的内容相匹配的实时数据库的安全规则是:

{
  "rules": {
    ".read": "auth.uid !== null",
    ".write": "auth.uid !== null"
  }
}
这将授予任何经过身份验证的用户对整个数据库的完全读写访问权限。请阅读我对此问题的回答,了解有关此类规则的安全/风险权衡的更多信息: