更新firebase中的值会删除子

时间:2018-04-10 09:27:54

标签: java android firebase firebase-realtime-database

我的应用有一个用户个人资料和一个愿望清单,这两个都保存在firebase上

[使用的火树树木]

问题是,当用户更改他/她的国家/地区,性别或名称时,整个愿望清单中的孩子会被自动删除我仍然不知道为什么,所以你们可以帮忙吗? 这些是我的代码的片段:

更新个人资料活动中的proflie的方法:

public void updateProfile() {
    String name = editName.getText().toString().trim();
    String country = countriesSpinner.getSelectedItem().toString();
    String gender = genderSpinner.getSelectedItem().toString();

    UserInfo userInfo = new UserInfo(name, country, gender);
    databaseReference.child(user.getUid()).setValue(userInfo);
}

在其他活动中将项目添加到WishList(存储在本地数据库中的产品信息):

 Button wishListBtn = (Button) findViewById(R.id.wishListBtn);
    wishListBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if(firebaseAuth.getCurrentUser() != null) {
                final FirebaseUser user = firebaseAuth.getCurrentUser();
                final String key = databaseReference.child(user.getUid()).child("WishList").push().getKey();

                final WishlistItem wlItem = new WishlistItem();
                wlItem.setwId(key);
                wlItem.setwName(cursor.getString(1));
                wlItem.setwStore(cursor.getString(2).toUpperCase());
                wlItem.setwCategory(cursor.getString(3));




                databaseReference.child(user.getUid()).child("WishList").orderByChild("wName").equalTo(cursor.getString(1)).addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        if( dataSnapshot.exists()) {
                            //Value exists
                            Toast.makeText(ProductDetails.this, "Already added to Wish List", Toast.LENGTH_SHORT).show();

                        } else {
                            //Value doesn't exist
                            databaseReference.child(user.getUid()).child("WishList").child(key).setValue(wlItem);
                            Toast.makeText(ProductDetails.this, "Product Added successfully to Wish List", Toast.LENGTH_SHORT).show();
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

1 个答案:

答案 0 :(得分:1)

使用

databaseReference.child(user.getUid())
                 .setValue(userInfo);

覆盖整个节点。

你可以做(​​作为例子)

databaseReference.child(user.getUid())
                 .child("uCountry")
                 .setValue(country)

或者您向userId添加另一个子项,例如userInfo,其中包含国家/地区,性别和名称

databaseReference.child(user.getUid())
                 .child("userInfo")
                 .setValue(userInfo);