如何在不删除firebase中的数据的情况下修改数据库

时间:2018-04-08 15:00:53

标签: java android database firebase firebase-realtime-database

我有2个活动将数据输入到同一个孩子的数据库中......我将数据放入第一个活动的数据库中,当我从第二个活动中放入时,它取代了现有的数据...我该如何添加没有替换...我不想添加一个活动的所有数据因为我需要传递很多可能返回null的字符串所以我该怎么做

第一项活动

addData.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String name = input_name.getText().toString();

            HashMap<String, String> userMap = new HashMap<>();
            userMap.put("Unique", Uid);
            userMap.put("Name", name);
//                userMap.put("Status", "Hey There");
//                userMap.put("Image", "Default");
//                userMap.put("Thumb_image", "Default");
            userMap.put("Phone_Number", mNumber);

            mdatabase.setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {

第二项活动

private void updateDisplayPicture() {
                    HashMap<String, String> userMap = new HashMap<>();
            userMap.put("Image", downloadUrl);
            userMap.put("Thumb_image", "Default");


            mdatabase.setValue(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Toast.makeText(getApplicationContext(), "Profile Successfully Updated", Toast.LENGTH_SHORT).show();
                        startActivity(new Intent(SetUpProfileDisplayPicture.this, HomeScreen.class));
                        finish();
                    }
                }
            });

1 个答案:

答案 0 :(得分:0)

在第二个活动中,您添加的值将覆盖您在第一个活动中所拥有的值。

您需要将第一个活动中的值传递给第二个活动并再次添加:

  HashMap<String, String> userMap = new HashMap<>();
        userMap.put("Image", downloadUrl);
        userMap.put("Thumb_image", "Default");
        userMap.put("Unique", Uid);
        userMap.put("Name", name);
        userMap.put("Phone_Number", mNumber);

或者您可以在第二个活动中添加push(),从而防止覆盖值:

 mdatabase.push().setValue(userMap)

或者您可以使用updateChildren()

要同时写入节点的特定子节点而不覆盖其他子节点,请使用updateChildren()方法。

HashMap<String, String> userMap = new HashMap<>();
        userMap.put("Image", downloadUrl);
        userMap.put("Thumb_image", "Default");
mdatabase.updateChildren(userMap);

更多信息:

https://firebase.google.com/docs/database/android/read-and-write#updating_or_deleting_data