更新firebase中的项目
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新firebase中的项目相关的知识,希望对你有一定的参考价值。
我按照了如何更新firebase中的项目的教程,但是当我尝试时,它只添加一个带有新编辑名称的新项目。它没有删除我要更新的那个。
这是我的alertdialog代码(当我长按listview中的项目时会打开):
private void updateDialog(final String verktøynavn, final String verktøynr, final String verktøytype, final String verktøystatusibil, final String utlånttil, final String verktøystatusutlant) {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
LayoutInflater inflater = getLayoutInflater();
final View dialogView = inflater.inflate(R.layout.endreslette_dialog, null);
dialogBuilder.setView(dialogView);
final TextView tvverktøynavn = (TextView) dialogView.findViewById(R.id.tvverktøynavn);
final EditText etverktøynavn = (EditText) dialogView.findViewById(R.id.etverktøynavn);
final EditText etverktøynr = (EditText) dialogView.findViewById(R.id.etverktøynr);
final Spinner spverktøytype = (Spinner) dialogView.findViewById(R.id.spverktøytype);
final ImageView ivoppdater = (ImageView) dialogView.findViewById(R.id.ivoppdater);
final ImageView ivslettverktøy = (ImageView) dialogView.findViewById(R.id.ivslettverktøy);
dialogBuilder.setTitle(verktøynavn);
final AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show();
ivoppdater.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String navn = etverktøynavn.getText().toString().trim();
String nr = etverktøynr.getText().toString().trim();
String type = spverktøytype.getSelectedItem().toString();
if(TextUtils.isEmpty(verktøynavn)){
etverktøynavn.setError("Navn mangler");
return;
}
updateverktoy(navn, nr, type, verktøystatusibil, verktøystatusutlant, utlånttil);
}
});
}
private boolean updateverktoy(String id, String navn, String nr, String type, String statusibil, String statusutlant) {
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Verktøy").child(id);
Verktoy verktoy = new Verktoy(id, navn, nr, type, statusibil, statusutlant);
databaseReference.setValue(verktoy);
Toast.makeText(this, "Verktøy endret", Toast.LENGTH_LONG).show();
return true;
答案
发生这种情况是因为您使用的是setValue()
方法而不是updateChildren()
方法。如果id
每次调用updateverktoy()
时都不同,那么将添加一个新的孩子,如果id
相同,则该孩子将被覆盖。因此,为了更新子项,您需要使用相同的id
,一个包含要更新的新值的Map
,然后在该特定引用上调用updateChildren()
。
以上是关于更新firebase中的项目的主要内容,如果未能解决你的问题,请参考以下文章
从 Android Studio 中的片段将数据写入 Firebase
如何更新 Tablayout 中的片段? (Viewpager2, FragmentStateAdapter)