首页 > 解决方案 > 如何在 Firebase 自动生成的密钥下编辑子值

问题描述

我正在尝试在我的数据库中编辑“shopB”的值。我在视图持有者内这样做,通过使用带有编辑文本字段和批准按钮的对话框。当用户点击特定交易时,他们会看到一个对话框,他们可以在其中输入 shopB 的值,然后单击 Approve。

我正在努力做到这一点,因为我无法访问该值,因为 firebase 具有唯一生成的密钥。我有很多与我有类似问题的帖子,但是当我在视图持有者内部执行此操作时,我看不到如何使用 DataSnapshot。任何帮助将不胜感激,因为我迷路了。

数据库结构: 在此处输入图像描述

viewHolder.setItemClickListener(new ItemClickListener() {
                        @Override
                        public void onClick(android.view.View view, int position, boolean isLongClick) {
                            Toast.makeText(Request.this, "Receiving: " + shopA, Toast.LENGTH_SHORT).show();
                            ThisDialog = new Dialog(Request.this);
                            ThisDialog.setContentView(R.layout.dialog_template);
                            final EditText Write = (EditText) ThisDialog.findViewById((R.id.write));
                            Button Approve = (Button) ThisDialog.findViewById(R.id.approve);

                            Write.setEnabled(true);
                            Approve.setEnabled(true);

                            Approve.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    String newShopB = Write.getText().toString().replace(".", " ");
                                    transaction.child("key").child("shopB").setValue(newShopB);
                                    Toast.makeText(Request.this, "CustB Approval", Toast.LENGTH_SHORT).show();
                                    ThisDialog.cancel();
                                }
                            });
                            ThisDialog.show();
                        }
                    });

这将是我的代码,但显然我有“transaction.child(“key”)”的地方找不到密钥。

哦,事务在我的代码前面定义为

database = FirebaseDatabase.getInstance();
start = database.getReference("Transaction");
transaction = start.child(passedEmail);

标签: javaandroidfirebasefirebase-realtime-database

解决方案


这是解决您的项目的可能解决方案:

start.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
          for (DataSnapshot child : dataSnapshot.child(key).getChildren()) {

                //insert additional codes here
              }
            }
          });

推荐阅读