尝试使用Firebase Realtime数据库进行setValue时,获得权限被拒绝的错误

问题描述

我正在使用Firebase进行项目,我希望在其中存储有关工作的基本信息。我创建了作业对象,并按照我认为是将其存储到数据库中的正确步骤进行操作,但是我不断收到错误消息(特别是最后一行):

D/FA: Connected to remote service
V/FA: Processing queued up service tasks: 4
I/AssistStructure: Flattened final assist data: 4736 bytes,containing 1 windows,25 views
V/FA: Inactivity,disconnecting from the service
D/CompatibilityChangeReporter: Compat change id reported: 147798919; UID 10151; state: disABLED
W/RepoOperation: setValue at /Job/-MEVMjcPp1ryvkEUQ4Fx Failed: DatabaseError: Permission denied

我试图写入数据库的Java文件(AddFragment.java):

package com.example.android.portfolio;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.example.android.portfolio.helpers.Job;
import com.example.android.portfolio.helpers.Validation;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class AddFragment extends Fragment {
    //Database Reference
    DatabaseReference ref;

    //Create validation object
    Validation validation = new Validation();

    //Create Job object to pass into database
    Job job;

    //Component object creation
    EditText editTextCompanyName;
    EditText editTextJobName;
    EditText editTextWebsite;
    EditText editTextContactName;
    EditText editTextContactEmail;
    EditText editTextApplicationLink;
    Spinner dropdown;
    Button buttonAdd;
    String[] items = new String[]{"One Week","Two Weeks","One Month","Never"};

    String companyName,jobName,website,contactName,contactEmail,applicationLink;
    int dropdownChoice;


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_add,container,false);




        editTextCompanyName = (EditText) view.findViewById(R.id.editTextCompanyName);
        editTextJobName = (EditText) view.findViewById(R.id.editTextJobName);
        editTextWebsite = (EditText) view.findViewById(R.id.editTextWebsite);
        editTextContactName = (EditText) view.findViewById(R.id.editTextContactName);
        editTextContactEmail = (EditText) view.findViewById(R.id.editTextContactEmail);
        editTextApplicationLink = (EditText) view.findViewById(R.id.editTextApplicationLink);
        dropdown = (Spinner) view.findViewById(R.id.spinnerRemind);
        buttonAdd = (Button) view.findViewById(R.id.buttonAdd);

        //Create the spinner and set values to it using the above array. Warnings here are for possible null values
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this.getActivity(),android.R.layout.simple_spinner_dropdown_item,items);
        dropdown.setAdapter(adapter);

        ref = FirebaseDatabase.getInstance().getReference().child("Job");

        buttonAdd.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Get data from GUI objects and put it into variables
                companyName = editTextCompanyName.getText().toString().trim();
                jobName = editTextJobName.getText().toString().trim();
                website = editTextWebsite.getText().toString().trim();
                contactName = editTextContactName.getText().toString().trim();
                contactEmail = editTextContactEmail.getText().toString().trim();
                applicationLink = editTextApplicationLink.getText().toString().trim();
                dropdownChoice = dropdown.getSelectedItemPosition();

                //Job object initialization
                job = new Job(companyName,applicationLink,dropdownChoice);

                //Push values to database
                ref.push().setValue(job);
                Toast.makeText(AddFragment.this.getActivity(),"Data inserted to database",Toast.LENGTH_LONG);

            }
        });


        return view;
    }
}

firebase设置中的当前规则:

Firebase Rules Screenshot

到目前为止,我已经尝试过:

  1. 将规则配置从true更改为“ auth!= null”,“ auth == null”
  2. 数据库推送添加子值。
  3. 使用其他模拟器。

这是我第一次使用Firebase,因此我试图了解使用Nosql数据库的情况,但是由于我的规则文件,我不明白我缺少连接过程的哪一部分,因此不应拒绝任何访问以进行写入

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)