2017-01-17 25 views
5

मैं एक एंड्रॉइड ऐप विकसित कर रहा हूं और हर बार जब उपयोगकर्ता इस ऐप को लॉन्च करता है, तो यह इस उपयोगकर्ता से एक नया रजिस्टर (यदि मौजूद नहीं है) उत्पन्न करेगा, मौजूदा डेटा अपडेट करने पर, और मेरा ऐप उपयोगकर्ता नोड में अधिक जानकारी डालेंगे।एंड्रॉइड फ़ायरबेस अपडेट केवल कुछ फ़ील्ड

हर बार जब मैं इस नोड को अद्यतन करता हूं, तो अन्य सभी जानकारी खो जाती है।

मेरे उपयोगकर्ता वर्ग

@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; 
    } 

} 

और मेरे अद्यतन कोड:

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); 

    } 
} 

जब मैं फोन myRef.updateChildren(childUpdates);, मेरे सभी पुराने डेटा अपडेट किया जाता है और अपने नए बच्चों (है कि मैं अनुप्रयोग के दौरान बनाया) कर रहे हैं खो गया। जो रास्ता है जो उपयोगकर्ताओं को शामिल प्रतीत होता है -

enter image description here

+0

हाय प्रयास करें। अपना डेटाबेस संरचना पोस्ट करें। –

+0

हाय, मैं आदेश ** myRef.updateChildren (childUpdates) चलाने के बाद पल से एक छवि अपलोड करता हूं; ** – rodrigo

उत्तर

6

संदर्भ जिसके साथ आप अद्यतन प्रदर्शन कर रहे हैं पथ FB_REFERENCE_USER के लिए है।

updateChildren केवल तत्काल बच्चों को अपडेट किया गया है, जिनके मूल्यों को प्रतिस्थापित किया जा रहा है। तो अद्यतन पूरे बच्चे को उपयोगकर्ता के लिए बदल रहा है और बच्चों को बिना छेड़छाड़ के अन्य बच्चों के लिए छोड़ रहा है। यह अपेक्षित व्यवहार है।

आपको उस विशिष्ट उपयोगकर्ता के लिए एक रेफरी का उपयोग करके अद्यतन करने की आवश्यकता है - ताकि उस उपयोगकर्ता के गुण जो अपडेट नहीं किए जा रहे हैं, छूटे रहें।

है यही कारण है कि आप इस तरह कुछ करने की जरूरत है:

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

updateChildren के व्यवहार दस्तावेज में here वर्णन किया गया है।

5

यदि आप केवल कुछ क्षेत्र को अपडेट करना चाहते, उपयोग करने के लिए

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

हाय, धन्यवाद, मैं यह कर रहा हूं और ठीक है। हालांकि, मैं एक "साफ" मोड के लिए ** ** ** ** कक्षा का उपयोग करने का प्रयास करता हूं .. – rodrigo

+1

@rodrigo आपको अपने उपयोगकर्ता कक्षाओं में आवश्यक सभी डेटा जोड़ने की आवश्यकता है। –

+0

@ AldiRenaldiGunawan- यह सही था! लेकिन फिर से आपकी मदद की ज़रूरत है। यह सही था क्योंकि 8 फील्ड से मुझे केवल 1 फ़ील्ड अपडेट करने की आवश्यकता थी, और यह वास्तव में निष्पादन समय बचाता है। हालांकि अब मुझे 8 फील्ड में से केवल 3 फील्ड अपडेट करने की ज़रूरत है? किसी छोटी वस्तु के साथ इसे अद्यतन करने के लिए कोई चाल है जिसमें केवल 3 फ़ील्ड होंगे ?? – user3833732

संबंधित मुद्दे