更新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)

片段中的Firebase数据不是持久的,会重新下载

将片段中的Firebase信息检索到recyclerview中

从firebase检索图像以在片段中的回收器视图时出错

片段视图返回后执行的 Firebase 查询