更新child而不是在firebase中创建新的child!!将其与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();
}
});}

Motive在上面的代码中,我正在字符串通过android应用程序更新firebase数据,在android应用程序中,它在警报对话框中向用户输入信息,并显示在recyclerview哪个hhave更新按钮中,我想在点击更新按钮时添加存在数据,但这是在创建新数据,而不是添加存在数据。

困难我的代码创建新的子项,而不是添加现有的一个

对不起,但我认为如果你发布了数据库的图片,会更容易理解这个问题。这个问题还不清楚。根据您代码中的注释,以下是我的理解。

//我的火球有结构-->数据库名称-->quot;查询"--->标题名称";android应用程序";

所以,标题("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中的数据图片,这将有助于更好地理解这个问题。因为我无法想象字段是在哪里创建的(在query?或"android应用程序"下(。

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

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

最新更新