【问题标题】:My firebase Realtime database path is not working我的 firebase 实时数据库路径不工作
【发布时间】:2021-03-10 23:25:55
【问题描述】:

我正在制作一个基于 firebase 实时数据库的应用程序。

我希望我的数据库结构如下所示:-

我正在尝试通过以下 java 代码将该数据写入我的 firebase Realtime 数据库:-

public class AddActivity extends AppCompatActivity {

    private EditText etName;
    EditText etRoll;
    Button btnAdmit;
    Button btnView;

    String stName;
    String stRoll;
    FirebaseDatabase myfire;
    DatabaseReference myRef;

    @Override
    public void onBackPressed() {

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        etName = (EditText) findViewById(R.id.idUser);
        etRoll = (EditText) findViewById(R.id.idPass);
        btnView = (Button) findViewById(R.id.idView);

        btnAdmit= (Button) findViewById(R.id.idAdmit);
        myfire = FirebaseDatabase.getInstance();

        myRef = myfire.getReference("Users")
                            .child("uid");// I dont know what
                                          // to write in this child
                                          // in stead of
                                          // "uid"
       

        btnAdmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                stName = etName.getText().toString();
                stRoll = etRoll.getText().toString();


                etName.setText("");
                etRoll.setText("");



                myRef.child("101").addValueEventListener(new ValueEventListener() {

                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                       model model =new basic();
                       model.setFb01name(stName);
                       model.setFb04roll(stRoll);
                       myRef.setValue(model);
                       LayoutInflater inflater = getLayoutInflater();
                       View layout = inflater.inflate(R.layout.toast,
                                (ViewGroup) findViewById(R.id.toast_id));
                       TextView text = (TextView) layout.findViewById(R.id.idToast);
                        text.setText("Added.");
                        Toast toast = new Toast(AddActivity.this);
                        toast.setGravity(Gravity.CENTER ,0, 0);
                        toast.setDuration(Toast.LENGTH_SHORT);
                        toast.setView(layout);
                        toast.show();
                       // btnAdmit.setEnabled(false);
                       // btnAdmit.setVisibility(View.GONE);
                    }




                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {
                        LayoutInflater inflater = getLayoutInflater();
                        View layout = inflater.inflate(R.layout.toast,
                                (ViewGroup) findViewById(R.id.toast_id));
                        TextView text = (TextView) layout.findViewById(R.id.idToast);
                        text.setText(" Database Error.");
                        Toast toast = new Toast(getApplicationContext());
                        toast.setGravity(Gravity.CENTER ,0, 0);
                        toast.setDuration(Toast.LENGTH_LONG);
                        toast.setView(layout);
                        toast.show();

                        DatabaseError e = null;

                        Log.e("Database", "Error", e.toException());
                    }



                });
            }
        });

我的模型类是这样的:

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;
        }
}

logcat 错误信息中没有任何内容。我没有在 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"
      }
    }
  }
}

请调查此事并提供您的见解和实用的解决方案。

【问题讨论】:

  • 如果您想获取经过身份验证的用户的 uid,请参考答案 stackoverflow.com/questions/50081668/…
  • @AmodGokhale 这确实是要采取的方法。你能写一个答案,展示如何在 OPs 代码中使用这种方法吗?
  • 感谢@Frank van Puffelen 提出实用的解决方案。我无法使用上面提供的解决方案。请告诉我在哪里修改我的代码。

标签: java android firebase-realtime-database firebase-authentication


【解决方案1】:

试试下面的代码

public class AddActivity extends AppCompatActivity {

    private EditText etName;
    EditText etRoll;
    Button btnAdmit;
    Button btnView;

    String stName;
    String stRoll;
    FirebaseDatabase myfire;
    DatabaseReference myRef;

    @Override
    public void onBackPressed() {

    }

    private String getUID() {
        FirebaseUser mUser = FirebaseAuth.getInstance().getCurrentUser();
        if (mUser != null) {
            String strUID = mUser.getUid();
            if (!TextUtils.isEmpty(strUID)) {
                return strUID;
            }
        }

        return "";

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_add);
            etName = (EditText) findViewById(R.id.idUser);
            etRoll = (EditText) findViewById(R.id.idPass);
            btnView = (Button) findViewById(R.id.idView);

            btnAdmit = (Button) findViewById(R.id.idAdmit);
            myfire = FirebaseDatabase.getInstance();

            String strUID = getUID();
            if (TextUtils.isEmpty(strUID)) {
                //handle case of null UID
            }

            myRef = myfire.getReference("Users/" + strUID);


            btnAdmit.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    stName = etName.getText().toString();
                    stRoll = etRoll.getText().toString();


                    etName.setText("");
                    etRoll.setText("");



                    myRef.child("101").addValueEventListener(new ValueEventListener() {

                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                            model model = new basic();
                            model.setFb01name(stName);
                            model.setFb04roll(stRoll);
                            myRef.setValue(model);
                            LayoutInflater inflater = getLayoutInflater();
                            View layout = inflater.inflate(R.layout.toast,
                                (ViewGroup) findViewById(R.id.toast_id));
                            TextView text = (TextView) layout.findViewById(R.id.idToast);
                            text.setText("Added.");
                            Toast toast = new Toast(AddActivity.this);
                            toast.setGravity(Gravity.CENTER, 0, 0);
                            toast.setDuration(Toast.LENGTH_SHORT);
                            toast.setView(layout);
                            toast.show();
                            // btnAdmit.setEnabled(false);
                            // btnAdmit.setVisibility(View.GONE);
                        }




                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {
                            LayoutInflater inflater = getLayoutInflater();
                            View layout = inflater.inflate(R.layout.toast,
                                (ViewGroup) findViewById(R.id.toast_id));
                            TextView text = (TextView) layout.findViewById(R.id.idToast);
                            text.setText(" Database Error.");
                            Toast toast = new Toast(getApplicationContext());
                            toast.setGravity(Gravity.CENTER, 0, 0);
                            toast.setDuration(Toast.LENGTH_LONG);
                            toast.setView(layout);
                            toast.show();

                            DatabaseError e = null;

                            Log.e("Database", "Error", e.toException());
                        }



                    });
                }
            });

【讨论】:

  • 非常感谢@Amod Gokhale。这才是我真正想要的。
猜你喜欢
  • 2021-07-13
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多