Записать новые данные в базу данных firebase не удалось

Я пытаюсь добавить некоторые контактные данные в базу данных реального времени firebase отдельно от пользовательских данных. Это моя древовидная структура: введите описание изображения здесь Я пытаюсь получить значение name пользователя (например, UID-1) и в дочернем элементе Contact создать новый дочерний элемент того же самого user и запишите значение name, а также два других значения (contatcMethod и 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();
                            }
                        }
                    });
            }
        });

    }

}

И моя UserContact java:

package com.rimikri.smartpedi;

public class UserContact {
    public String contactMethod, phoneValue, name;

    public UserContact() {

    }

    public UserContact(String contactMethod, String phoneValue, String name) {
        this.contactMethod = contactMethod;
        this.phoneValue = phoneValue;
        this.name = name;
    }
}

Но мне не удается записать какие-либо данные в базу данных с помощью этого кода. Он возвращает тост "Не удалось". Я был бы очень признателен, если бы узнал, что я делаю неправильно.

У меня есть ошибка:

DatabaseError: Отказано в доступе


person Hijibiji    schedule 04.09.2018    source источник
comment
см. firebase.google.com/docs/database/android/read-and -написать   -  person sasikumar    schedule 04.09.2018


Ответы (1)


Похоже, это может быть проблема с разрешением, потому что в противном случае код должен работать. Попробуйте следующее, чтобы обновить разрешение на чтение и запись базы данных.

{
  "rules": {
    "Users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    },
    "Contact": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}
person Ashonko    schedule 04.09.2018
comment
Спасибо за предложение. - person Hijibiji; 04.09.2018