2016-03-05 10 views
5

एंड्रॉइड डेटा बाध्यकारी समर्थन की सबसे अच्छी सुविधाओं में से एक यह है कि यह आईडी सेट के साथ दृश्य के लिए फ़ील्ड भी उत्पन्न करता है। यह कोडबेस को कोई फ़ील्ड नहीं है या findViewById() कॉल आवश्यक हैं।एंड्रॉइड आलसी डेटा बाध्यकारी संभव है?

लेकिन समस्या यह है कि बाध्यकारी उदाहरण केवल bind() कॉल के माध्यम से पुनर्प्राप्त किया जा सकता है जो बाध्यकारी शेड्यूल करता है। यह खराब है जब डेटा को असीमित रूप से प्राप्त किया जा रहा है और आमतौर पर NullPointerException फेंक दिया जाता है।

क्या दृश्य फ़ील्ड के साथ बाध्यकारी उदाहरण वास्तविक डेटा बाध्यकारी प्रक्रिया से कम किया जा सकता है?

ढेर ट्रेस: ​​

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference 
     at com.app.android.databinding.ActivityRestaurantDetailsBinding.executeBindings(ActivityRestaurantDetailsBinding.java:381) 
     at android.databinding.ViewDataBinding.executePendingBindings(ViewDataBinding.java:350) 
     at android.databinding.ViewDataBinding$6.run(ViewDataBinding.java:167) 
     at android.databinding.ViewDataBinding$5.onViewAttachedToWindow(ViewDataBinding.java:137) 
     at android.view.View.dispatchAttachedToWindow(View.java:14525) 

उत्तर

3

यह, कि है, मेरा मानना ​​है, इसकी सबसे पदोन्नत सुविधाओं में से एक भावना, डाटा शून्य चर इस प्रकार कोई नल पॉइंटर फेंक दिया जाना चाहिए पर ध्यान नहीं देगा बाध्यकारी बनाने के लिए प्रतीत नहीं होता । आप async कॉल आदि के बाद चर को संशोधित करने की जरूरत है तुम सिर्फ dataBinding.executePendingBindings()

उपयोग कर सकते हैं the docs

उत्पन्न बाध्यकारी वर्ग से एक सेटर है और वर्णित चर से प्रत्येक के लिए मनुष्य होगा। आदि संदर्भ प्रकार, पूर्णांक के लिए 0, बूलियन के लिए झूठे के लिए अशक्त,

और

जेनरेट किए गए डेटा बाइंडिंग कोड स्वचालित रूप से nulls लिए जाँच करता है - चर डिफ़ॉल्ट ले जाएगा जावा मूल्यों तक सेटर कहा जाता है और शून्य सूचक अपवाद से बचें। उदाहरण के लिए, अभिव्यक्ति में @ {user.name}, यदि उपयोगकर्ता शून्य है, तो user.name को अपना डिफ़ॉल्ट मान (शून्य) असाइन किया जाएगा। यदि आप user.age का संदर्भ दे रहे थे, जहां उम्र एक int है, तो यह 0

+0

मुझे भी उम्मीद थी। जेनरेट कोड की जांच करने पर, जगह पर कई शून्य जांच थी, लेकिन यह इस बूलियन प्रकार के लिए सच नहीं था। क्या यह एक बग की तरह लगता है? – razzledazzle

+0

'एंड्रॉइड: टेक्स्ट = "@ {DateFormatter.format (item.orderDate)}" के लिए समान है। इसका परिणाम 'डेटफॉर्मेटर.फॉर्मैट (शून्य)' का आह्वान करने के एनपीई कारण में होता है। – drindt

+1

पिछले कुछ महीनों में डाटाबेसिंग का उपयोग करने के बाद भी शून्य की जांच के साथ बहुत सारी समस्याएं प्रतीत होती हैं जो बहुत ही निराशाजनक है। सबसे प्रमुख कारण जिसमें बूलियन प्रकार होने के कारण @razzledazzle ने कहा –

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