java - 更新孩子而不是在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中,我想添加存在单击该更新按钮时的数据,但它创建新数据而不是添加现有数据。
困难我的代码创建新的孩子而不是添加存在一个
解决方案
抱歉,但我认为如果您发布了数据库的图片,会更容易理解这个问题。问题不清楚。根据您代码中的评论,这是我的理解。
// 我的 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 应用程序”下)。
如果您已经纠正了问题,请告诉我们。
推荐阅读
- php - 如何使用php将两个值从链接传递到另一个页面?
- python - 如何将 matplotlib 轴比例从 0-1 更改为 Sin 函数
- excel - 如果写入同一行的一个单元格,则在空单元格上写入 N/A 或“-”
- javascript - 从本地存储导入 svg/png 图像
- python - Heroku 没有找到 procfile - Flask-SocketIO
- julia - Julia:Flux.jl:“函数渐变不接受关键字参数”
- vba - 如何使用 VBA 将我的 PowerPoint 保存为只读 PDF 文件?
- linux - 我如何将我的软件发布到公共 linux 存储库,以便与“apt”安装程序等一起使用
- python - 在类中创建一个接受虚拟参数的方法
- excel - 如何避免重复记录?