向firebase实时数据库添加数据显示错误

fnatzsnv  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(367)

我正在做一个基于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)

有谁能实际地指导我吗?

mgdq6dx1

mgdq6dx11#

onCancelled 是在侦听器上调用的,这意味着您没有读取试图访问的数据的权限。如果你记录 databaseError.toException() 你能进去吗 onCancelled 你也应该看到,因为它应该告诉你,许可被拒绝。
将代码提取下来,您将一个侦听器附加到:

myRef = myfire.getReference();
myRef.child("201").addValueEventListener(...

所以这就是路径 /201 在数据库中,您的规则实际上不授予任何人读取权限。
我最好的猜测是 myRef = myfire.getReference(); 行是错误的,删除它会导致阅读 /Users/Some Authentic User/201 ,这可能就是你想做的。

相关问题