安卓 - Firebase - 保存新数据而不覆盖旧数据

5

这个问题是因为我的上一个问题包含了两个问题,而没有将其缩小到一个问题

目的

用户可以存储新数据,而不会覆盖他们先前提交的数据

描述

目前,用户在 Incident Report 节点内的报告数据将在用户输入新报告时被覆盖。

应该将用户发送的旧 Incident Report 的数据与新数据一起保存。

这样,相关部门将能够查看以前的报告和新的报告数据。

问题

每当当前登录的用户保存“报告”时,报告数据将覆盖报告数据

保存数据的代码

private void submitReport(final String userReportDate,final String userReportTime,
                              final String userReportLocation,final String userReportDescription) {

        jReportCurrentUserID = FirebaseAuth.getInstance().getCurrentUser();
        final String reportUserID = jReportCurrentUserID.getUid();
        jReportByUserDatabase = FirebaseDatabase.getInstance().getReference().child("Incident Reports").child(reportUserID);

        HashMap<String, String> incidentReportUser = new HashMap<>();
        incidentReportUser.put("date", userReportDate);
        incidentReportUser.put("time", userReportTime);
        incidentReportUser.put("location", userReportLocation);
        incidentReportUser.put("description", userReportDescription);

        jReportByUserDatabase.setValue(incidentReportUser).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if(task.isSuccessful()){
                    jReportLoad.dismiss();
                    Toast.makeText(getActivity(), "Report was Sent", Toast.LENGTH_SHORT).show();
                    jReportDatePick.setText("");
                    jReportTimeEnt.setText("");
                    jReportLocationEnt.setText("");
                    jReportDescriptionEnt.setText("");
                }else{
                    jReportLoad.dismiss();
                    Toast.makeText(getActivity(), "Report failed to be sent", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
2个回答

4

jReportByUserDatabase.push().setValue(incidentReportUser)

按照以下方式编写代码 (push() 添加值而不是覆盖)。


谢谢你的回答,Cadet!! =D - The Employee 123
谢谢!终于找到了我的问题的解决方案! - Aziz

0

查看推送文档

请注意,您所有的报告现在都将存储在由.push()创建的唯一密钥下面一级。

private void submitReport(final String userReportDate,final String userReportTime,
                              final String userReportLocation,final String userReportDescription) {

        jReportCurrentUserID = FirebaseAuth.getInstance().getCurrentUser();

        final String reportUserID = jReportCurrentUserID.getUid();
        jReportByUserDatabase = FirebaseDatabase.getInstance().getReference().child("Incident Reports").child(reportUserID).push();
        DatabaseReference newReport = jReportByUserDatabase.push();

        HashMap<String, String> incidentReportUser = new HashMap<>();
        incidentReportUser.put("date", userReportDate);
        incidentReportUser.put("time", userReportTime);
        incidentReportUser.put("location", userReportLocation);
        incidentReportUser.put("description", userReportDescription);

        newReport.setValue(incidentReportUser).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                if(task.isSuccessful()){
                    jReportLoad.dismiss();
                    Toast.makeText(getActivity(), "Report was Sent", Toast.LENGTH_SHORT).show();
                    jReportDatePick.setText("");
                    jReportTimeEnt.setText("");
                    jReportLocationEnt.setText("");
                    jReportDescriptionEnt.setText("");
                }else{
                    jReportLoad.dismiss();
                    Toast.makeText(getActivity(), "Report failed to be sent", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

谢谢你的回答,Peter!! = D 我已经点赞了,但是我只能接受一个答案,所以我选择了第一个。抱歉。 - The Employee 123

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接