更新firebase中的项目

问题描述 投票:0回答:1

我按照了如何更新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;
android listview firebase-realtime-database android-alertdialog
1个回答
0
投票

发生这种情况是因为您使用的是setValue()方法而不是updateChildren()方法。如果id每次调用updateverktoy()时都不同,那么将添加一个新的孩子,如果id相同,则该孩子将被覆盖。因此,为了更新子项,您需要使用相同的id,一个包含要更新的新值的Map,然后在该特定引用上调用updateChildren()

© www.soinside.com 2019 - 2024. All rights reserved.