继official documentation之后,我想在Firebase上存储一个新对象(我的Order
类的实例),并且我希望它为我创建一个新的密钥。这是我在做什么:在Android上的Firebase中创建新对象
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference orders = database.getReference("orders");
orders.push().setValue(order);
但是没有显示从控制台。我需要提前创建密钥orders
吗?我无法从控制台手动创建,因为它显示空键无效。
的Order
类如下:
public class Order {
private final ArrayList<OrderItem> orderItems = new ArrayList<>();
public ArrayList<OrderItem> getOrderItems() {
return orderItems;
}
public void addOrderItem(OrderItem orderItem) {
orderItems.add(orderItem);
}
}
编辑
根据该意见,我检查了错误,我得到:
Permission denied
但我的访问规则:
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
因此,该规则应该只适用于users
密钥,而不适用于orders
密钥。对于其他密钥,默认规则应适用:
默认规则要求身份验证。它们允许对应用程序的已认证用户进行完整的读写访问。
我的用户通过身份验证,所以为什么这不起作用在我的情况?我如何确保用户的身份验证正确?
在任何情况下,改变了访问规则:
{
"rules": {
"orders": {
".read": "auth != null",
".write": "auth != null"
},
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
不解决问题。
是您的[security rul (https://firebase.google.com/docs/database/security/)设置为允许访问?默认规则只允许通过身份验证的用户访问。 –
要检测这是否是问题,请在您的'setValue()'调用中添加一个完成监听器。请参阅[向Android写入值时检测错误](http://stackoverflow.com/documentation/firebase/5548/how-do-i-listen-for-errors-when-accessing-the-database#t=201608190142309558745)例如 –
@qbix我正在使用默认安全规则,但用户已通过身份验证。 – manfcas