首页 > 解决方案 > 更新孩子而不是在firebase中创建新的!将其与 android recyclerview 连接

问题描述

Firebase 数据库 ShowProjectAdapter.class

  @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, final int position ) {


        final showprojectdetails sRD = MainImageUploadInfoList.get(position);
        holder.projectnameTextView.setText(sRD.getTitle());

        holder.projectdescription.setText(sRD.getBody());
        holder.projecttag.setText(sRD.getTag());
        holder.org.setText(sRD.getOrg());
        holder.date.setText(sRD.getDate());
        holder.time.setText(sRD.getTime());
        holder.ori.setText(sRD.getOrigin());

//adding alert dialog on update button in the recyclerview
        holder.t.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final AlertDialog.Builder builder = new AlertDialog.Builder(context);
                LayoutInflater inflater = LayoutInflater.from(context);
                final View dialogView = inflater.inflate(R.layout.popupwindow, null);
                builder.setView(dialogView);
//connecting layout attributes with the java class
                final TextView title = dialogView.findViewById(R.id.pname);
                final TextView body = dialogView.findViewById(R.id.pdescription);
                final TextView org = dialogView.findViewById(R.id.organization);
                final TextView tag = dialogView.findViewById(R.id.typetag);
                final TextView origin = dialogView.findViewById(R.id.country);

               
                
                builder.setView(dialogView);
            
//displaying the currect texts of the field using settext
                title.setText(sRD.getTitle());
                body.setText(sRD.getBody());
                origin.setText(sRD.getOrg());
                tag.setText(sRD.getTag());
                org.setText(sRD.getOrigin());

//save button of the alert dialog
                builder.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {


//firebase api to of saving current time and date in the firebase                   
                    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                    final String date = dateFormat.format(Calendar.getInstance().getTime());
                    DateFormat timeFormat = new SimpleDateFormat("h:mm a");
                    final String time = timeFormat.format(Calendar.getInstance().getTime());
                     DatabaseReference databaseReference;
                    @Override
                    public void onClick(final DialogInterface dialogInterface, final int i) {
//calling firebase api on alert dialog save button
// my firebase has structure -->databse name--> "query" ---> title name "android app"                     
  DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("query").child(title.getText().toString());
                        Map<String, Object> map = new HashMap<>();
                        map.put("title", title.getText().toString());
                        map.put("date", date);
                        map.put("org", org.getText().toString());
                        map.put("origin", origin.getText().toString());
                        map.put("tag", tag.getText().toString());
                        map.put("time", time);
                        map.put("body", body.getText().toString());
                        ref.updateChildren(map);
                       [enter image description here][1]
                    }

//cancel button of the alert dialog
                }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.cancel();
                    }
                });

                builder.show();

            }

        });}

动机 在上面的代码中,我试图通过android应用程序更新firebase数据,在android应用程序中,它在警报对话框中向用户输入并显示到具有更新按钮的recyclerview中,我想添加存在单击该更新按钮时的数据,但它创建新数据而不是添加现有数据。

困难我的代码创建新的孩子而不是添加存在一个

标签: javaandroidfirebase-realtime-databaseandroid-recyclerview

解决方案


抱歉,但我认为如果您发布了数据库的图片,会更容易理解这个问题。问题不清楚。根据您代码中的评论,这是我的理解。

// 我的 firebase 有结构 --> 数据库名称--> "query" ---> 标题名称 "android app"

那么,标题(“android 应用程序”)是一个表名,它有您要更新的子项(标题、日期、组织等)?如果是这种情况,请尝试使用 setValue() 为每个单独的孩子设置值。

String titleString = title.getText().toString()    
DatabaseReference m = FirebaseDatabase.getInstance().getReference().child("query").child("android app");
m.child("title").setValue(titleString);
m.child("date").setValue(date);

如果它不起作用,可能是您没有正确引用它。正如我所说,如果您可以上传存储在 firebase 中的数据图片,这将有助于更好地理解问题。因为我无法想象这些字段是在哪里创建的(在查询下?或在“android 应用程序”下)。

如果您已经纠正了问题,请告诉我们。

理想情况下,如果数据库看起来像这样,它应该可以工作


推荐阅读