代码之家  ›  专栏  ›  技术社区  ›  Alexander

更新firebase中的项目

  •  0
  • Alexander  · 技术社区  · 6 年前

    我遵循了一个关于如何在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;
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Alex Mamo    6 年前

    这是因为您正在使用 setValue() 方法而不是 updateChildren() 方法如果 id 每次调用 updateverktoy() ,则将添加新的子级,如果 身份证件 相同,将覆盖该子级。因此,为了更新子级,您需要使用相同的 身份证件 Map 包含要更新然后调用的新值的 updateChildren() 在那个特定的参考上。