我正在做一个基于firebase实时数据库的应用程序。我制定了如下规则:
{
// Allow anyone to read data, but only authenticated content owners can
// make changes to their data
"rules": {
"Users": {
"$uid": {
".read": true,
// or ".read": "auth.uid != null" for only authenticated users
".write": "auth.uid == $uid"
}
}
}
}
我试图通过以下java代码添加数据。但是有个错误。
myfire = FirebaseDatabase.getInstance();
myRef = myfire.getReference("Users").child("Some Authentic User");
//======================
btnAdmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stName = etName.getText().toString();
stRoll = etRoll.getText().toString();
etName.setText("");
etRoll.setText("");
myRef = myfire.getReference();
myRef.child("201").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
model model =new model();
model.setFb01name(stName);
model.setFb04roll(stRoll);
myRef.child("Basic").setValue(model);
Toast.makeText(getApplicationContext (),"Sorry",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(getApplicationContext (),"Error",Toast.LENGTH_SHORT).show();
}
});
}
});
我的模型课是这样的:
public class model {
String fb01name;
String fb04roll;
public model() {
}
public model(String fb01name, String fb04roll) {
this.fb01name = fb01name;
this.fb04roll = fb04roll;
}
public String getFb01name() {
return fb01name;
}
public void setFb01name(String fb01name) {
this.fb01name = fb01name;
}
public String getFb04roll() {
return fb04roll;
}
public void setFb04roll(String fb04roll) {
this.fb04roll = fb04roll;
}
}
我找不到错误。日志是空白的。我以前成功地添加了数据。但更改规则后失败了。我希望数据库路径如下:
(主节点)用户--
(first Child)---Authenitic User(As added by "Add User")
(second child)-----some id( like '201')
(Targeted Children) 1 ------fb01name (and its value)
2------fb04roll (and its value)
有谁能实际地指导我吗?
1条答案
按热度按时间mgdq6dx11#
自
onCancelled
是在侦听器上调用的,这意味着您没有读取试图访问的数据的权限。如果你记录databaseError.toException()
你能进去吗onCancelled
你也应该看到,因为它应该告诉你,许可被拒绝。将代码提取下来,您将一个侦听器附加到:
所以这就是路径
/201
在数据库中,您的规则实际上不授予任何人读取权限。我最好的猜测是
myRef = myfire.getReference();
行是错误的,删除它会导致阅读/Users/Some Authentic User/201
,这可能就是你想做的。