【发布时间】:2016-09-22 07:33:02
【问题描述】:
我在简单的 Android 应用中写入 Firebase 数据库时遇到问题。我已将我的数据库规则设置为公开:
{
"rules": {
".read": true,
".write": true
}
}
创建了一个简单的类Message:
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
public class Message {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dbRef = database.getReference();
public String sender;
public String message;
public Message(){}
public Message(String sender, String message) {
this.sender = sender;
this.message = message;
}
}
并设置一个按钮来执行 onClick 方法writeNewMessage,这些是重要的代码行:
int counter = 0;
public void writeNewMessage(View view) {
counter += 1;
Message messageToWrite = new Message("John", "Simple message: " + counter);
String messageId = String.valueOf(counter);
dbRef.child("users").child(messageId).setValue(messageToWrite);
}
运行时,我收到错误:
W/RepoOperation: setValue at /users/1 failed: DatabaseError: Permission denied
我知道这个问题看起来很简单,而且很可能已经被重复了,但是我还没有找到任何提出这个问题的人,而他们的错误不涉及身份验证或其他一些组件。问题的简单性是最让我困惑的地方。
编辑:我也发现了这个错误:
Failed to load module descriptor class: Didn't find class "com.google.android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor"
【问题讨论】:
-
嗯...规则看起来不错,所以听起来确实很奇怪。你确定你保存/发布了规则吗?
-
我点击了发布按钮并成功尝试了模拟器,据我所知它已经发布了!
-
很奇怪。有几件事要检查:首先,您能否检查您的 google-services.json 并确保您使用的项目是您期望的项目。其次,您可以尝试从项目中删除身份验证(如果存在,请注释掉 firebase-auth 的 gradle 依赖项),看看是否有什么不同?
-
在我的情况下注释掉 firebase-auth 不起作用,但我认为这是因为我的 google-services.json 有问题。我在设置时出错,所以我在 Firebase 上重新创建了整个项目,最后一切正常。非常感谢!
-
附带说明,您最好实例化您的数据库并在
Message类之外获取对它的引用。
标签: android firebase firebase-realtime-database