在Firebase数据库中写入新数据失败

时间:2018-09-04 08:52:08

标签: android firebase firebase-realtime-database

我正在尝试在Firebase实时数据库中与用户数据分开添加一些联系人数据。这是我的树结构: enter image description here 我想做的是,获取用户的name值(例如UID-1),并在Contact子级中,创建同一用户的新子级,并写入{{ 1}}值以及其他两个值(namecontatcMethod)。

到目前为止,这是我的代码(phoneValue有一个RadioGroup):

contactMethod

我的public class ContactDetails extends AppCompatActivity { RadioGroup radioGroup; RadioButton radioButton; private EditText phoneNumber; private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_details); mAuth = FirebaseAuth.getInstance(); radioGroup = findViewById(R.id.radioGroup); phoneNumber = findViewById(R.id.phoneNumber); Button submit = findViewById(R.id.submit); submit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int radioId = radioGroup.getCheckedRadioButtonId(); radioButton = findViewById(radioId); contact(); } }); } private void contact() { FirebaseUser user = mAuth.getCurrentUser(); String userID = user.getUid(); final String phoneValue = phoneNumber.getText().toString().trim(); DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users"); ref.child(userID).addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { final String name = dataSnapshot.child("name").getValue().toString(); UserContact userContact = new UserContact( contactMethod, phoneValue, name ); FirebaseDatabase.getInstance().getReference("Contact") .child(FirebaseAuth.getInstance().getCurrentUser().getUid()) .setValue(userContact).addOnCompleteListener(new OnCompleteListener < Void > () { @Override public void onComplete(@NonNull Task < Void > task) { if (task.isSuccessful()) { Toast.makeText(ContactDetails.this, "Saved Successfully", Toast.LENGTH_LONG).show(); } else { Toast.makeText(ContactDetails.this, "Not successful", Toast.LENGTH_LONG).show(); } } }); } }); } } Java是:

UserContact

但是用此代码无法成功地在数据库中写入任何数据。它正在返回“未成功”的吐司。非常感谢您了解我在做什么。

我遇到的错误是:

  

DatabaseError:权限被拒绝

1 个答案:

答案 0 :(得分:1)

似乎这可能是一个权限问题,因为否则,代码应该可以工作。请尝试以下操作以更新数据库的读写权限。

{
  "rules": {
    "Users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    },
    "Contact": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}