2017-01-17 19 views
5

Tôi đang phát triển ứng dụng Android và mỗi khi người dùng khởi chạy ứng dụng này, ứng dụng sẽ tạo một đăng ký mới (nếu không tồn tại) từ người dùng này, cập nhật dữ liệu hiện có và ứng dụng của tôi sẽ chèn thêm thông tin trong nút người dùng.Android Firebase chỉ cập nhật một số trường

Mỗi lần tôi cập nhật nút này, tất cả các thông tin khác đều bị mất.

lớp người sử dụng tôi

@IgnoreExtraProperties 
public class User { 

public String userID; 
public String userName; 
public String userMail; 
public boolean active; 

    public User() {} 

    public User(String userID, String userName) { 
     this.userID = userID; 
     this.userName = userName; 
    } 

    public User(String userID, String userName, String userMail, boolean active) { 
     this.userID = userID; 
     this.userName = userName; 
     this.userMail = userMail; 
     this.active = active; 

    } 

    @Exclude 
    public Map<String, Object> toMap() { 
     HashMap<String, Object> result = new HashMap<>(); 
     result.put("user_id", userID); 
     result.put("name", userName); 
     result.put("email", userMail); 
     result.put("active", active); 

     return result; 
    } 

} 

Và mã cập nhật của tôi:

public class FireBaseUser { 
    public static String FB_REFERENCE_USER = "user"; 

    public void updateUser(String userID, String userName, String userMail, boolean userActive) { 
     // Write a message to the database 
     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference myRef = database.getReference(FB_REFERENCE_USER); 


     User user = new User(userID, userName, userMail, userActive); 
     Map<String, Object> postValues = user.toMap(); 

     Map<String, Object> childUpdates = new HashMap<>(); 
     childUpdates.put(userID, postValues); 

     myRef.updateChildren(childUpdates); 

    } 
} 

Khi tôi gọi myRef.updateChildren(childUpdates);, tất cả dữ liệu cũ của tôi được cập nhật và trẻ em mới của tôi (mà tôi tạo ra trong ứng dụng) là mất đi.

enter image description here

+0

Hi. Làm đăng cấu trúc cơ sở dữ liệu của bạn. –

+0

Xin chào, tôi tải lên một hình ảnh từ thời điểm này sau khi chạy lệnh ** myRef.updateChildren (childUpdates); ** – rodrigo

Trả lời

6

Các tài liệu tham khảo mà bạn đang thực hiện quá trình cập nhật cho đường dẫn FB_REFERENCE_USER - đó dường như là con đường, trong đó có người sử dụng.

updateChildren chỉ cập nhật những trẻ em ngay lập tức, với các giá trị được thay thế. Vì vậy, bản cập nhật sẽ thay thế toàn bộ trẻ em cho người dùng và để lại trẻ em cho những người dùng khác bị ảnh hưởng. Đó là hành vi mong đợi.

Bạn cần thực hiện cập nhật bằng cách sử dụng ref cho người dùng cụ thể đó - để các thuộc tính của người dùng đó không được cập nhật sẽ bị ảnh hưởng.

Đó là, bạn cần phải làm điều gì đó như thế này:

User user = new User(userID, userName, userMail, userActive); 
Map<String, Object> postValues = user.toMap(); 
myRef.child(userID).updateChildren(postValues); 

Hành vi của updateChildren được mô tả here trong tài liệu.

5

nếu bạn muốn cập nhật chỉ có một số lĩnh vực, cố gắng sử dụng

myRef.child(userID).child("which field do you want to update").setValue(ValueVariable); 
+0

Xin chào, cảm ơn, tôi đang làm điều này và được rồi. Tuy nhiên, tôi thử sử dụng lớp ** người dùng ** cho chế độ "sạch" .. – rodrigo

+1

@rodrigo bạn cần phải thêm tất cả dữ liệu cần thiết vào các lớp Người dùng của mình. –

+0

@ AldiRenaldiGunawan- Điều này thật hoàn hảo! Nhưng cần sự giúp đỡ của bạn một lần nữa. Điều này là hoàn hảo bởi vì từ 8 feilds tôi chỉ cần cập nhật 1 feild, và điều này thực sự tiết kiệm thời gian thực hiện. Tuy nhiên bây giờ tôi cần phải cập nhật chỉ 3 feilds trong số 8feilds? bất kỳ thủ thuật nào để cập nhật nó với một đối tượng nhỏ hơn chỉ chứa 3 feilds đó ?? – user3833732

Các vấn đề liên quan