Java 尝试使用Firebase实时数据库设置值()时,获取权限被拒绝错误

Java 尝试使用Firebase实时数据库设置值()时,获取权限被拒绝错误,java,android,firebase,firebase-realtime-database,firebase-security,Java,Android,Firebase,Firebase Realtime Database,Firebase Security,我正在使用firebase进行一个项目,希望在其中存储有关工作的基本信息。我创建了job对象,并按照我认为正确的步骤将其存储到数据库中,但我不断收到错误(特别是最后一行): 我试图写入数据库的java文件(AddFragment.java): package com.example.android.portfolio; 导入android.os.Bundle; 导入android.view.LayoutInflater; 导入android.view.view; 导入android.view.V

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

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

package com.example.android.portfolio;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.Spinner;
导入android.widget.TextView;
导入android.widget.Toast;
导入androidx.annotation.NonNull;
导入androidx.annotation.Nullable;
导入androidx.fragment.app.fragment;
导入com.example.android.portfolio.helpers.Job;
导入com.example.android.portfolio.helpers.Validation;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
公共类AddFragment扩展了Fragment{
//数据库参考
数据库参考文献;
//创建验证对象
验证=新验证();
//创建要传递到数据库的作业对象
工作;
//组件对象创建
EditText editTextCompanyName;
EditText editTextJobName;
编辑文本编辑文本网站;
EditText editTextContactName;
编辑文本编辑文本联系人电子邮件;
编辑文本编辑文本应用程序链接;
旋转器下拉列表;
按钮D;
字符串[]项=新字符串[]{“一周”、“两周”、“一个月”、“从不”};
字符串companyName、jobName、网站、contactName、contactEmail、applicationLink;
int下拉选择;
@可空
@凌驾
创建视图时的公共视图(@NonNull LayoutInflater inflater、@Nullable ViewGroup container、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u 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=(微调器)view.findViewById(R.id.spinnerId);
ButtonAd=(Button)view.findViewById(R.id.ButtonAd);
//创建微调器并使用上面的数组为其设置值。此处的警告针对可能的空值
ArrayAdapter=新的ArrayAdapter(this.getActivity(),android.R.layout.simple\u微调器\u下拉菜单\u项,项);
下拉列表.setAdapter(适配器);
ref=FirebaseDatabase.getInstance().getReference().child(“作业”);
ButtonAd.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//从GUI对象获取数据并将其放入变量中
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();
//作业对象初始化
作业=新作业(公司名称、作业名称、网站、联系人名称、联系人电子邮件、应用程序链接、下拉选择);
//将值推送到数据库
参考push().setValue(作业);
makeText(AddFragment.this.getActivity(),“插入数据库的数据”,Toast.LENGTH\u LONG);
}
});
返回视图;
}
}
我的firebase设置中的当前规则:

到目前为止,我试图:

  • 将规则配置从true更改为“auth!=null”、“auth==null”
  • 向数据库推送添加子值
  • 使用不同的模拟器
  • 这是我第一次使用firebase,因此我试图了解如何使用NoSQL数据库,但我不知道我缺少连接过程的哪一部分,因为根据我的规则文件,不应该拒绝写入任何访问

    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
    
    
    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, jobName, website, contactName, contactEmail, applicationLink, dropdownChoice);
    
                    //Push values to database
                    ref.push().setValue(job);
                    Toast.makeText(AddFragment.this.getActivity(), "Data inserted to database", Toast.LENGTH_LONG);
    
                }
            });
    
    
            return view;
        }
    }